java編程之內部類(一)

第一部分 內部類形式

1、基本形式
a.以類形式存在:


 class Outer{ 
     ......
     class Inner{
        ......
     }
 }

b.以字段形式存在:
在內部類前加上修飾詞private等,當作類的字段使用

2、在方法和任意作用域中定義內部類
a.快速創建被實現的接口的接口引用

interface InClass{....}
class Outer{
   public  InClass getInClass(){
        class Inner implements InClass{
       //實現接口中定義的方法
        ......
         }
         return new Inner( );
    }
 }

b.java允許在任意作用域內創建一個類來解決當前問題

3、匿名內部類
a.默認構造器生成匿名內部類對象

    //匿名內部類的基本實現
      class Outer{
          public Inner inner(){
                return new Inner(){     //創建匿名內部類對象
                   //匿名內部類方法以及字段 
                    ......
                }; //匿名內部類特有的分號並不是用來表示內部類的結束,事實上是表示一個表達式的結束,而該表達式正好包含了匿名內部類         
           }
       }


     //在接口上使用匿名內部類
     interface Inner{void f();}
     class Outer{
          public Inner inner(){
               return new Inner(){
                   public void f(){......} 
               };
          }    

      }
 b.基類帶參構造器生成匿名內部類對象

 //匿名類內部不使用參數
    class Base{
          private String s;
          public Base(String x){ s = x;}
          public String sign(){ return s;}
     }
     class Outer{
          public Base base(String y){
               return new Base(y){  //參數y將不被使用在匿名類內部,而是傳遞給匿名類的基類(Base)構造器
                    public String sign(){return super.sign()+"in Outer_Base" ;}

               };
          }
     }

     //匿名類使用參數
     interface Inner{String readlable();}
     class Outer{
          public Inner inner(final String dest){  //參數被使用在匿名內部類中,要求參數引用是final,而在java 8中則取消了這種限制
              return new Inner(){  
                  private String lable = dest; 
                  public String readLable(){return lable;}
              };
          }
     }

第二部分 內部類對象的創建

  1. 非靜態內部類
class Outer{
    //外部類自定義字段和方法
    ......
    class Inner{
    //內部類字段和方法
    ......
    }
    public static void main(String[] args){
        Outer.Inner in = new Outer().new Inner();
    }
}

2、靜態內部類

class Outer{
    //外部類自定義字段和方法
    ......
    static class Inner{
    //內部類字段和方法
    ......
    }
    public static void main(String[] args){
        Outer.Inner in = new Outer.Inner();
    }
}

3、使用.this創建正確類型的外部類對象引用

public class OuterThis {
    public String f(){
        return "OuterThis.f()";     

    public Inner inner(){
        return new Inner();
    }

    class Inner{
        public OuterThis getOuterThis(){
            return OuterThis.this;
        }
    }
    public static void main(String[] args){
        OuterThis ot = new OuterThis();
        OuterThis in = ot.inner().getOuterThis();
        if(ot.f().equals(in.f()))
            System.out.println("it's ok");
    }
}
發佈了32 篇原創文章 · 獲贊 51 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章