內部類

內部類:

       在一個類的內部還有另外一個類,稱爲內部類;
class 外部類{

         class 內部類{

         }

}

 

一個內部類的代碼:
class Outer{

         private String info = "hello world!!!" ;

         class Inner{

                   public void print(){

                            System.out.println(info) ;

                   }

         };

         public void fun(){

                   new Inner().print() ;

         }

};

public class Demo20{

         public static void main(String args[]){

                   new Outer().fun() ;

         }

};

 

內部類的缺點;

       · 一直提倡要編寫簡單代碼,如果按此代碼形式,可以發現如果使用了內部類,則代碼形式混亂。

 

內部類的優點:

       將前代碼中的內部類拿到外面來,實現同樣的功能,代碼如下:
class Outer{

         private String info = "hello world!!!" ;

         public void fun(){

                   new Inner(this).print() ;

         }

         public String getInfo(){

                   return this.info ;

         }

};

class Inner{

         private Outer out = null ;

         public Inner(Outer out){

                   this.out = out ;

         }

         public void print(){

                   System.out.println(this.out.getInfo()) ;

         }

};

public class Demo21{

         public static void main(String args[]){

                   new Outer().fun() ;

         }

};

       以上紅顏色的部分就是要增加的代碼,使用內部類可以方便的訪問外部類中的私有屬性。如果變爲兩個類了,則就要互相傳遞引用了。
       內部類生成之後的*.class文件:Outer$Inner.class
       那麼,如果現在要是直接在程序的外部訪問內部類的話,就必須使用外部類.內部類,纔可以找到內部類。
class Outer{

         private String info = "hello world!!!" ;

         class Inner{

                   public void print(){

                            System.out.println(info) ;

                   }

         };

};

public class Demo22{

         public static void main(String args[]){

                   Outer out = new Outer() ;

                   // 外部類.內部類 內部類對象 = 外部類實例.內部類實例

                   Outer.Inner in = out.new Inner() ;

                   in.print() ;

         }

};

       除此之外,內部類也可以在一個方法進行定義。
class Outer{

         private String info = "hello world!!!" ;

         // 如果想讓方法中定義的內部類,訪問此參數,則此參數前加一個修飾 —— final

         public void fun(final int temp){

                   // 直接在方法中定義內部類

                   class Inner{

                            public void print(){

                                     // 此處,方法中定義的內部類可以直接訪問外部類中定義的屬性

                                     System.out.println(info) ;

                                     System.out.println(temp) ;

                            }

                   };

                   new Inner().print() ;

         }

};

public class Demo23{

         public static void main(String args[]){

                   new Outer().fun(30) ;

         }

};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章