學習:僅總結語法
內部類就是在一個類中定義一個類.
1、內部類的訪問特點:
內部類可以直接訪問外部類的成員,包括私有
外部類要訪問內部類的成員,必須創建對象
2、內部類的分類:
按照內部類在類中定義的位置不同,可以分爲如下兩種方式
- 在類的成員位置:成員內部類
- 在類的局部位置:局部內部類(類定義在方法中),匿名內部類是局部內部類的一種特殊形式.
3、成員內部類,外界如何創建對象使用?
格式:外部類名.內部類名 對象名 = 外部類對象.內部類對象
Outer.Inner oi = new Outer().new Inner();
一、成員內部類
如果是私有的成員內部類,外界無法直接訪問。在方法內部創建成員內部類對象調方法,通過外部類對象調用成員方法
public class Outer {
private int num = 10;
//私有的成員內部類
private class Inner{
public void show(){
System.out.println(num);
}
}
public void method(){
//調用成員內部類,創建對象
Inner i =new Inner();
//在外界無法訪問私有的,但是在同一個類中可以訪問私有的類
i.show();
}
}
//測試類
public class OuterDemo {
public static void main(String[] args) {
Outer oi = new Outer();
oi.method();
}
}
二、局部內部類
局部內部類是在方法中定義的類,所以局部內部類方法調用外界是無法直接使用,也是間接調用,通過外部類對象調用成員方法,在方法內部創建局部內部類對象調方法
局部內部類類可以直接訪問外部類的成員,也可以直接訪問方法內的成員變量
//局部內部類
public class Outer {
private int num = 10;
public void method(){
int num2 = 20;
//局部內部類
class Inner {
public void show() {
System.out.println(num);
System.out.println(num2);
}
}
//局部內部類方法調用也是間接調用,通過外部類對象調用成員方法,在方法內部創建局部內部類對象調方法
Inner i = new Inner();
i.show();
}
}
//測試類
public class OuterDemo {
public static void main(String[] args) {
Outer oi = new Outer();
oi.method();
}
}
三、匿名內部類
前提:存在一個類或者接口,這裏的類可以是具體類也可以是抽象類
public class Outer {
public void method() {
/*
//匿名內部類
new Inter(){//new應該是一個對象,所以是匿名的對象。匿名內部類本質是匿名的對象
@Override
public void show() {
System.out.println("匿名內部類");
}
}.show(); //.show()對象調方法
*/
//多次調用匿名內部類
Inter i = new Inter() {//new應該是一個對象,所以是匿名的對象。匿名內部類本質是匿名的對象
@Override
public void show() {
System.out.println("匿名內部類");
}
};
i.show();
i.show();
i.show();
}
}
//測試類
public class OuterDemo {
public static void main(String[] args) {
Outer oi = new Outer();
oi.method();
}
}