java#內部類和嵌套類


內容思路來自Java編程思想,個人讀書做的筆記,僅個人復習之用,故他人參考請自行辨別內容是否有錯誤。


 

在類的類部可以定義類,叫做內部類。如果這個內部類被static修飾,此時內部的類叫做嵌套類。

內部類用在哪里,解決了什么問題?


 

內部類中一定包含的有外部類的引用,即Outer.this,

故,創建內部類,必須擁有外部類的實例。

-

public class Outer {
    
    private String foo = "kitty";
    
    class Inner{
        Outer getOuter(){
            // 在內部類中,可以通過dot this語法引用外部對象
            // 即 Outer.this
            return Outer.this;
        }
        
        public void bar(){
            // 內部類可以訪問外部類的任意屬性
            System.out.println(foo);
        }
    }

    public static void main(String[] args) {
        // 同過外部類dot內部類的方式 聲明一個引用
        Outer.Inner inner = null;
        
        // 通過外部類實例dot new的方式創建一個內部類的實例
        inner = new Outer().new Inner();
    }
}

- 


 

嵌套類:看一種單例的寫法。

-

public class Singleton {
    private static Singleton instance = null;

    private static class Inner{
        static{
            instance = new Singleton();
        }
    }

    public static Singleton getInstance(){
        return instance;
    }
}

-

其實,單例其他的寫法也有其他的

-

public class Singleton {
	private Singleton(){}
	private static class Inner{
		private static final Singleton INSTANCE = new Singleton();
	}
	
	public static Singleton getInstance(){
		return Inner.INSTANCE;
	}
} 

- 

 

值得思考的是,為啥會有內部類?內部類的出現解決了啥問題?這一部分需要多讀幾次java編程思想。我還是對這個東西不清不楚。

20190903:

1. 內部類可以理所當然的訪問外部類的成員變量,就好像內部類原本就擁有他們似的;

2. 內部類區別於嵌套類,嵌套類不依賴於外部類,可以單獨被實例化,但是內部類的實例化必須有外部類的實例;

3. 內部類的實例化必須要有外部類的實例,通過外部類實例點new的方式創建內部類實例;

4. 內部類好像可以屏蔽一些細節,外面的類看不到這些細節。同時內部類實現一些接口我繼承一些類從而具有一定的功能,通過這些功能完成對外部類的數據進行操作,

    而且,內部類的這些功能,外面的內有看不到,這樣可以避免一些特定的方法或實現被其他代碼調用;

5.內部類中可以通過外部類點this表示外部類的this。入Outer.this,這就是對外部類的引用;

6.現在看來內部類就是為了操作外部類的數據而存在的吧,內部類封裝了一些特定但是很私有的一些功能。

 

 

-


免責聲明!

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



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