//外嵌類
public class Test{
//內嵌類
class Teacher{
public void teach(){
}
}
public static void main(){
}
}
(1)外嵌類:自己內部定義了類的類
(2)內嵌類:在其他類中定義的類
類是由屬性和行爲構成,具體來說是成員變量和方法。
內部類相當於是外嵌類特殊的成員變量【註明2】
當內部類和外嵌類有重名成員,想要調用外嵌類的成員時,需要 外嵌類名.this.成員名
(1)內部類可以訪問所在類的所有成員,即使該成員是private的。
(2)外嵌類不能直接訪問內部類的所有成員,需要先創建內部類的對象,通過內部類的對象來訪問
常見調用內部類方法的手段
public Teacher getTeacher(){ //創建一個返回內部類對象的函數
return new Teacher();
}
在main函數中
(1)創建外嵌類的對象
(2)通過外嵌類對象調用上述方法
(3)通過上述方法調用需要的內部類對象
Test test = new Test();
test.getTeacher().teach();
//局部內部類:在函數內部創建的類
public void test(){
class Student{
}
}
局部內部類的對象 只能在該函數中使用
局部內部類前不能加訪問限定符,如public
//匿名類:沒有名字
//直接允許一個類的子類,用這個子類的類體創建一個子類的對象
Test test = new Test(){
}
在java中不常見,在javaScript中常見
類似於上轉型對象,可以重寫外嵌類的方法,調用是顯示的是重寫後的【註明1】
類似於上轉型對象,test是外嵌類的方法,是不能夠調用子類新增的方法,所以匿名類新增的方法,永遠不會被調用
【註明1:局部變量前不能加訪問限定符,否則報錯】
【註明2:定義在一個類內部的類,叫作“嵌套類”。嵌套類分爲兩種:static的和非static的。後者又有一個專門的名字,叫作“內部類”。】