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(){@Overridepublic void show() {System.out.println("匿名内部类");}}.show;}*/public void method(){Inter i = new Inter(){@Overridepublic 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();}}
