2008年2月2日 星期六

Nest class可overriding或定義新成員變數及方法但不能定義新建構子

class NestClass{
  static class StaticInner{
    void fun(){
      System.out.println( "static class StaticInner 原始的方法");
    }
  }
  class Inner{
    void fun(){
      System.out.println( "none static class Inner 原始的方法");
    }
  }
  Inner i;
  public static void main(String[] args){
    //==============================================================
    NestClass.StaticInner n0=new NestClass.StaticInner();
    n0.fun();
    //==============================================================
    NestClass.StaticInner n1=new NestClass.StaticInner(){//匿名類別開始
      void fun(){
        System.out.println( "static class StaticInner 被覆寫的方法");
      }
    };//匿名類別結束
    n1.fun();
    //==============================================================
    NestClass n2=new NestClass();
    n2.i=n2.new Inner();
    n2.i.fun();
    //==============================================================
    NestClass n3=new NestClass();
    n3.i=n3.new Inner(){//匿名類別開始
      void fun(){
           System.out.println( "none static class Inner 被覆寫的方法");
      }   
    };//匿名類別結束
    n3.i.fun();
  }
}
//================================================
class A{}
class NestClass2{
  public static void main(String[] args){
    A a=new A(int I){};//錯誤建立新的建構子
  }
}
/*
None static nest class 都要同時使用外部及內部class實體
使用範例:外部實體.內部實體.成員
匿名類別不能新增建構子

匿名類別在Java8.0前只能使用final 外部區域變數
Java8.0(含)後,匿名類別所參照到外部區域變數,會變為隱性final
*/

沒有留言: