入门
写在类内部的类,是外部类的成员
内部类可以直接访问外部类的成员,但外部类要先创建内部类的对象之后才能访问。
内部类是包裹他的类的一部分,内部类单独存在无意义。
成员内部类
如何获取成员内部类的对象:
和成员变量、方法、地位相同,所以修饰词是通用的
(比如如果写成private,那么外部无法创建内部类的对象,只能在外部类里面创建内部类对象)
当内部类为public:
//方法二
Outer.Inner oi=new Outer().new Inner();
当内部类为private:
在外部类中创建一个方法返回内部类的对象,然后在外界通过该方法获取内部类的对象。
注意:JDK16之后内部类中可以添加静态变量;
成员内部类如何获取外部类的成员变量:
重名的话就近原则,先从本类里面找,再往外找。
静态内部类(在内部类前面加了static)
静态内部类只能访问外部类中的静态变量和静态方法
不需要用外部类的对象调用了,直接类名就可以了。(new的是内部类名)
只要是静态的东西,都可以用类名.直接获取; 但是非静态的必须要实例化后才能调用。
调用静态方法的格式:外部类名.内部类名.方法名();
如果想要访问非静态的方法 需要创建外部类的对象后用对象调用;
如果要输出a,则要先创建Outer的对象,再输出o.a
(因为静态的是随着类的加载而加载)
show1是非静态,show2是静态。
局部内部类(内部类定义在方法里,用法类似于局部变量)
外界无法直接使用,需要在方法内部创建对象并使用!
可以直接访问外部类的成员,也可以访问方法内的局部变量!
匿名内部类(重点!!!)
隐藏了名字的内部类
可以写在成员位置,也可以写在局部位置
整体就是一个类的子类对象或者接口的实现类对象
new 接口名/类名(){
@Override
重写方法
}
如果一个类用的很少,单独定义这个类会很麻烦,可以直接运用匿名内部类简化代码。