什么是内部类?
在一个类的里面,再定义一个类。
public class Outer{ //外部类
public class Inner { //内部类
}
}
为什么要学习内部类?
例如: 要求写一个汽车类型的JAVABEAN
属性: 汽车的品牌,车龄,颜色,发动机的品牌,使用年限
其中发动机的品牌和使用年限相对于汽车来讲是相对独立的,因此我们可以知道如果再内部属性有相对独立的一部分时可以用内部类, 内部类表示的事物是外部类的一部分。
内部类的访问特点
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员时,必须创建对象
内部类的分类
成员内部类
静态内部类
局部内部类
匿名内部类
前三种基本上只在看源码的时候才能用上,做个了解就好,最后一种以后要经常用。
成员变量的规定方式
什么是静态内部类?
静态内部类是一种特殊的成员内部类,其实就是在内部类前加Static关键词。
直接创建静态内部类对象的方式?
Outer.Inner oi = new Outer.Inner();
如何调用静态内部类种的方法?
非静态方法: 先创建对象,用对象调用
静态方法: 外部类名.内部类名.方法名();
匿名内部类(重点)
匿名内部类本质上就是隐藏了名字的内部类
格式:
new 类名或者接口名() {
重写方法;
};
格式细节:
包含了继承或实现,方法重写,创建对象。
除去new 类名或接口名 整体就是一个类的子类对象或者接口的实现类对象,而上述格式其实就是创建了一个类的子类的对象或者接口的实现类对象。
使用场景
当方法的参数是接口或者类时。
以接口为例,可以传送这个接口的实现类对象。
如果实现类只要用一次,就可以匿名内部类简化代码。