12 抽象类与内部类
2024/3/29大约 3 分钟
12.1 抽象类与抽象方法
抽象方法:将共性的行为(方法)抽取到父类之后,由于每个子类执行的内容不同,所以父类不能确定具体的方法体。该方法就可以定义为抽象方法。
- 定义格式:public abstract retType methodName(paraList);
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类。
- 定义格式:public abstract class className{}
注意
注意事项: 抽象类不能实例化。
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
抽象类可以有构造函数(用于子类创建对象时对父类初始化)。
抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类。
12.2 内部类
12.2.1 概述
- 什么是内部类
- 写在一个类里面的类就叫做内部类。
- 什么时候用内部类
- B类表示的事物是A类的一部分,且B单独存在没有意义。如汽车发动机、ArrayList的迭代器、人的心脏等。
12.2.2 分类
内部类的分类:
成员内部类
静态内部类
局部内部类
匿名内部类
12.2.3 成员内部类
- 什么是成员内部类
- 写在成员位置的,属于外部类的成员。
- 成员内部类对象获取
成员内部类被private修饰时,在外部类编写方法,对外提供内部类对象
成员内部类被非私有修饰时,之间创建对象:Outer.Inner oi = new Outer.new Inner();
- 外部类成员变量与内部类成员变量重名时,内部类访问
- 访问外部类的成员变量:Outer.this.valueName;
12.2.4 静态内部类
静态内部类:成员内部类添加static关键字修饰。
访问:只能访问外部类中的静态变量和静态方法,如果需要访问非静态的需要创建外部类对象。
创建:Outer.Inner oi = new Outer.new Inner();
调用:
非静态方法:先创建对象,用对象调用。
静态方法:外部类名.内部类名.方法名();
12.2.5 局部内部类
局部内部类:
将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
外界无法直接使用,需要在方法内创建对象并使用。
该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
12.2.6 匿名内部类
匿名内部类:
本质上就是隐藏了名字的内部类。可以写在成员位置,也可以写在局部位置。
格式:
new 类名或者接口名(){重写方法;};细节
- 包含了继承或实现,方法重写,创建对象。整体就是一个类的子类对象或者接口的实现类对象。
应用场景
当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象。
如果实现类只要使用一次,就可以用匿名内部类简化代码。