學習總結:內部類:
乙個類定義在另外乙個類的內部,那麼就稱該類為內部類。內部類的class檔名:外部類名$內部類名·class。 內部類分為成員內部類、區域性內部類、匿名內部類。
public class outer
// 成員方法
public void method()
}}
一、成員內部類:
定義在外部類的成員位置。可以使用成員修飾符public static、可以繼承、實現介面。
訪問方式:
1、在外部類提供乙個方法建立內部類的物件進行訪問。
2、在其他類中直接建立內部類的物件。outer.inner inner = new outer().new inner();
public class outer
}// 成員內部類出現了靜態成員,該類必須使用static修飾
public static class inner2
}//在外部的方法中建立了內部類的物件,然後呼叫內部 方法。
public void instance()
}// 測試
public class demo
}
注意細節:
1、內部類可以直接訪問外部類的成員,包括私有成員。如上:訪問變數 y。
2、外部類與內部類存在同名的成員變數時,內部類中預設訪問的是內部類中的成員變數,可通過: 外部類·this·成員變數,指定訪問外部類中的成員。如上:訪問變數 x。
3、私有的成員內部類只能在外部類中提供乙個方法建立內部類的物件進行訪問(即方式一)。
4、成員內部類一旦出現了靜態的成員,那麼該類也必須使用static修飾。
5、靜態的內部類訪問方式:如上。
面試題:
class outer
}}
二、區域性內部類:
在乙個類的方法中定義另外乙個類。
訪問:外部類的方法中建立內部類物件,進行訪問。
public class outer2
}inner inner = new inner();
inner.print();
}}// 測試:
public class demo
}
注意細節:
1、區域性內部類只能訪問所在函式的fanal屬性。
使用final的原因:
案例中的heart() 方法、print() 方法之間的資料不能共享,可使用static、final實現共享,但static不能修飾區域性變數。加final後將y 放到了方法區中的常量池中共享。而在print方法中呼叫的只是y 的複製品,heart() 方法執行完畢後 y 才消失。
三、匿名內部類:
沒有內名的內部類,注意:匿名內部類只是沒有類名,其他的一概成員都是具備的。
使用前提:乙個類(抽象、非抽象)、介面。
new thread(
() ->
).start();
// 實現關係下的匿名內部類:
inte***ce dao
public class outer3
}.add();
}}// 測試:
public class demo
}
匿名內部類可用於給方法傳遞實參,
public class demo
});}
private static void test(dao d)
}
java基礎 內部類
一 內部類 將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類 內建類,巢狀類 非static內部類可以直接訪問外部類中的成員,包括私有成員。原因 因為內部類中持有了乙個外部類的引用,引用的格式為 外部類名.this 非靜態內部類不能定義static成員 1 內部類定義在外部類的成員位置上 方法...
java基礎《內部類》
一 內部類的訪問規則 1.內部類可以直接訪問外部類中的成員,包括私有 之所以可以直接訪問外部類中的成員,是因為內部類中持有了乙個外部類的引用 格式 外部類名.this 2.外部類要訪問內部類,必須建立內部類物件 訪問格式 1.當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中,可以直接...
java基礎 內部類
內部類 一 內部類的訪問規則 1,內部類可以直接訪問外部類中的成員,包括私有。之所以可以直接訪問外部類中的成員,是因為內部類中持有了乙個外部類的引用,格式 外部類名.this 2,外部類要訪問內部類,必須建立內部類物件。例子 class outer static class inner2 publi...