JAVA普通內部類的用法


  內部類顧名思義就是定義在一個類的內部

  內部類又有普通內部類、方法和域內的內部類、匿名內部類、嵌套內部類

普通內部類的基礎用法

 1 class MyClass{
 2     class InnerClass1{
 3         public InnerClass1() {
 4             System.out.println("InnerClass1 created..");
 5         }
 6     }
 7     class InnerClass2{
 8         public InnerClass2() {
 9             System.out.println("InnerClass2 created..");
10         }
11     }
12     void getInnerClass() {
13         new InnerClass1();
14         new InnerClass2();
15     }
16     public static void main(String[] args) {
17         new MyClass().getInnerClass();
18     }
19 }
//輸出:
InnerClass1 created..
InnerClass2 created..

上圖就是一個普通內部類的例子,同時內部類自動擁有對其外圍類所有成員的訪問權。

main方法中獲得內部類的實例需要借助其他方法,因為main方法是static的。

如果想要直接生成對外部類對象和內部類對象的引用,就需要借助.this和.new關鍵字。

.this關鍵字

 

 1 class MyClass{
 2     class InnerClass{
 3         public InnerClass() {
 4             System.out.println("InnerClass created..");
 5         }
 6         MyClass getMyClass() {
 7             System.out.println("getMyClass..");
 8             return MyClass.this;
 9         }
10     }
11     
12     InnerClass getInner() {
13         return new InnerClass();
14     }
15     public static void main(String[] args) {
16         MyClass mc=new MyClass();
17         MyClass.InnerClass mic=mc.getInner();
18         MyClass mc2=mic.getMyClass();
19     }
20 }

 

上例代碼第8行,內部類通過.this關鍵字返回了一個MyClass對象。

.new關鍵字

 

 上述普通內部類的第一個例子,我們得到一個內部類的對象是通過一個void方法。如果想要在main方法中直接獲得實例可用

MyClass.InnerClass mic=new MyClass().new InnerClass();

 內部類向上轉型

內部類向上轉型為一個接口時,內部類可以很好的隱藏起來。

 1 interface MyInterface{
 2     int getValue();
 3 }
 4 class MyClass{
 5     private class InnerClass implements MyInterface{
 6         public int getValue() {
 7             return 1024;
 8         }
 9 }
10     public MyInterface getInn() {
11         return new InnerClass();//內部類向上轉型為接口
12     }
13     public static void main(String[] args) {
14         MyClass mClass=new MyClass();
15         System.out.println(mClass.getInn().getValue());
16     }
17 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM