0x01:内部类概述
内部类: 就是在一类中定义一个类。 举例: 在一个类中的内部定义一个类B, 类B就被称为内部类。
内部类的定义格式:
public class 类名{
修饰符 class 类名{
}
}
内部类的访问特点:
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要反问内部类的成员,必须创建对象
0x02:成员内部类
按照内部类在类中的位置不同,可以分为如下格式
- 在类中的成员位置:成员内部类
- 在类中的局部位置:局部内部类
成员内部类使用:
格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象
Outer.Inner i = new Outer().new Inner();
如果是私有的内部类,需要定义一个方法,创建私有的内部类的对象
再去调用它
0x03:局部内部类
局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用该类可以直接访问外部类的成员,也可以访问方法内的局部变量
范例: 定义可一个 Outer类,类中有Inner局部内部类,并在方法中创建了Inner 对象
package test;
public class Outer {
private int num = 10;
public void method(){
class Inner{
public void show(){
System.out.println(num);
}
}
Inner i = new Inner();
i.show();
}
}
创建Outer类的对象,直接调用method方法
package test;
public class demo {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
匿名内部类:
前提: 存在一个类或者接口,这里的类可以使具体类,也可以是抽象类
new 类名或者接口名(){
重写方法
}
new Inter(){
public void show(){
}
}
本质: 是一个继承了该类或者实现了该接口的子类匿名对象
实例: 创建了一个Outer类, 在Outer类中创建了Inter的匿名的对象
package test;
public class Outer {
/*
public void method(){
new Inter(){
@Override
public void show() {
System.out.println("匿名内部类");
}
}.show;
}
*/
public void method(){
Inter i = new Inter(){
@Override
public void show() {
System.out.println("匿名内部类");
}
};
i.show();
}
}
创建了一个接口
package test;
public interface Inter {
void show();
}
测试Demo类
package test;
public class demo {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}