一、成員內部類
//外部類 Outer(外部)
public class Outer {
//私有屬性
private int id = 10;
//方法
public void out(){
System.out.println("輸出外部類的方法!");
}
//定義內部類
public class Inter{
public void in(){
System.out.println("輸出內部類的方法!");
}
//獲取外部類的私有屬性id
public void getID(){
System.out.println(id);
}
}
}
public class Application {
public static void main(String[] args) {
//例項化外部類
Outer outer = new Outer();
outer.out();//呼叫外部類的方法
//例項化內部類
//透過外部類來例項化內部類
Outer.Inter inter = outer.new Inter();
inter.in();//呼叫內部類的方法
inter.getID();//獲取外部類的私有屬性
}
}
執行效果圖如下:
注意:如果內部類是靜態類,則無法獲取外部類的屬性
- 原因:靜態類會先例項化,比id屬性載入要早
//定義內部類
public static class Inter{
public void in(){
System.out.println("輸出內部類的方法!");
}
//獲取外部類的私有屬性id
public void getID(){
System.out.println(id);//報錯!!!!
}
}
- 解決方法:把id也設定為靜態
private static int id = 10;
二、區域性內部類
public class Part {
public void method(){
//區域性內部類
class Inter{
//方法
public void test(){
}
}
}
}
三、匿名內部類
public class Anonymity {
//匿名內部類
public static void main(String[] args) {
//沒有名字的初始化類,不用將例項儲存到變數中
new Inter().test();
}
}
//類
class Inter{
public void test(){
System.out.println("test");
}
}
注意:也可以例項化介面
public class Anonymity {
//匿名內部類
public static void main(String[] args) {
//沒有名字的初始化類,不用將例項儲存到變數中
//new Inter().test();
new Inter_2(){
@Override
public void test_2() {
}
};
}
}
//介面
interface Inter_2{
void test_2();
}