JAVA內部類使用,JAVA類使用

來源:互聯網
上載者:User

JAVA內部類使用,JAVA類使用

一、什麼是內部類?

  一個類的定義放在另一個類的內部,這個類就叫做內部類

二、內部類有那些特性?

  1、內部類仍然是一個獨立的類,在編譯之後內部類會被編譯成獨立的.class檔案,但是前面冠以外部類的類名和$符號 。
  2、內部類不能用普通的方式訪問。內部類是外部類的一個成員,因此內部類可以自由地訪問外部類的成員變數,無論是否是private的 。
  3、內部類聲明成靜態,就不能隨便的訪問外部類的成員變數了,此時內部類只能訪問外部類的靜態成員變數 。

三、內部類有哪幾種?

  1.成員內部類

    如:    
 1 package com.test01; 2  3 public class A { 4     // 內部類 B 繼承 TestPojo 和實現 TestInterface 介面 5     class B extends TestPojo implements TestInterface{ 6         //內部類 B 自己的方法 7         public void run(){ 8             System.out.println("我正在跑!"); 9         }10         //重寫的介面方法11         public void testf() {12             System.out.println("實現介面!");13         }14     } 15     // 方法裡面調用內部類16     public  void test(){17         B b = new B() ;18         b.testf() ;        // 掉用重寫介面方法19         b.run() ;         // 調用自己的方法20         b.testpojo() ;     // 調用繼承父類的方法21     }22     // main 方法測試23     public static void main(String[] args) {24         A a = new A() ;25         a.test() ;26     }27 }28 // 定義了一個介面 ,方法為testf() 29 interface TestInterface{30     public void testf() ;31 }32 // 定義了一個普通類  方法testpojo() 33 class TestPojo{34     public void testpojo(){35         System.out.println("我是簡單的pojo類");36     }37 }38 // 實現 調用內部類裡面的方法39 class Textone{40     public static void main(String[] args) {41         A.B b = new A().new B() ;    //調用類A裡面的內部類B42         /** 等同於 下面代碼43          *         A a = new A() ;44          *         A.B b = a.new B() ;45          * */46         b.testf() ;      // 掉用重寫介面方法47         b.run() ;        // 調用自己的方法48         b.testpojo() ;   // 調用繼承父類的方法49     }50 }

  2、方法內部類

 1 package com.test01; 2  3 public class PerTest { 4     public void test(){         // 定義一個方法 5         class Ne{                // 定義一個方法內部類 6             public void fle(){    // 定義方法內部類的方法  7                 System.out.println("我正在飛翔!"); 8             } 9         } ;10         new Ne().fle() ;        //調用內部類的方法11     }12     public static void main(String[] args) {13         new PerTest().test() ;    //測試14     }15 }  

  注意: (1)、方法內部類只能在定義該內部類的方法內執行個體化,不可以在此方法外對其執行個體化。
      (2)、方法內部類對象不能使用該內部類所在方法的非final局部變數。        

      因為方法的局部變數位於棧上,只存在於該方法的生命期內。當一個方法結束,其棧結構被刪除,
      局部變數成為曆史。但是該方法結束之後,在方法內建立的內部類對象可能仍然存在於堆中!
      例如,如果對它的引用被傳遞到其他某些代碼,並儲存在一個成員變數內。正因為不能保證局部變
      量的存活期和方法內部類對象的一樣長,所以內部類對象不能使用它們。 (該理解來源於百度百科)

   3、匿名內部類

      1)、抽象匿名內部類

        

 1 package com.anonymous; 2  3 public class AbstractClass { 4     public void test(){                //方法為test 5         TestA a = new TestA(){        //實現抽象類別 6             @Override 7             public void run() {        //實現抽象類別的方法 8                 System.out.println("我正在使用抽象匿名內部類"); 9             }10         } ;11         a.run() ;                    //調用內部類的方法12     }13     public static void main(String[] args) {14         new AbstractClass().test() ;    //測試15     }16 }17 //定義一個抽象類別 TestA  抽象方法為run()18 abstract class TestA{19     public abstract void run() ;20 }

    2)、介面匿名內部類

 1 package com.anonymous; 2  3 public class TestAnonymous { 4     MyInterface m = new MyInterface(){    //實現介面 5         public void eat() {                //重寫MyInterface 介面方法 6             System.out.println("我正在吃飯!"); 7         } 8     } ; 9     public void ss(){    //方法ss10         m.eat() ;        //調用重寫的方法11     }12     public static void main(String[] args) {13         new TestAnonymous().ss() ;    //測試14     }15 }16 //定義一個介面  方法為 eat17 interface MyInterface{18     public void eat() ;19 }

  注意:匿名內部 類 可以定義在方法內也可以定義在類的成員中,不管是那種匿名內部類都不能被外部類直接調用

四、內部類的作用?

  每個內部類都能獨立地繼承自一個(介面的)實現,所以無論外圍類是否已經繼承了某個(介面的)實現,對於內部類都沒有影響。如果沒有
內部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與編程問題就很難解決。從這個角度看,內部類使得多重繼承的解決方案變得完整。
介面解決了部分問題,而內部類有效地實現了“多重繼承”。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.