Java 10
一、多态
Ctrl+alt状态下,鼠标点击方法,会显示出选择
- 定义
- 同一个对象,在不同的时刻表现出来的不同形态。
- 前提和体现(多态的基本条件)
- 有继承/实现关系
- 方法重写
- 有父类引用指向子类对象
- 访问特点(编译阶段)
- 成员变量:编译看左边,执行看右边;
- 成员方法:编译看左边,执行看右边。
- 因为成员方法有重写,成员变量没有重写,所以对于成员方法和成员变量不一样。
- 多态的优缺点
- 优点:提高了程序的扩展性
- 具体体现:定义方法的时候,使用父类型作为参数,将来在使用时,使用具体子类型参与操作。
- 弊端:不能使用子类的特有功能
- 优点:提高了程序的扩展性
- 多态中的转型
- 向上转型(可以直接转换)
- 从子到父:父类引用指向子类对象
- 向下转型(强转)
- 从父到子:父类引用转为子类对象(有可能会发生类型转换的异常)
- 向上转型(可以直接转换)
二、抽象类
- 基础
- 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
- 抽象类和抽象方法用abstract关键字来修饰。
- 抽象类:abstract class 类名{}
- 抽象方法:public abstract void eat ();//抽象方法中没有方法体
- 特点
- 抽象类中不一定有抽象方法,但是有抽象方法的类必须为抽象类;
- 抽象类不能实例化;
- 抽象类由具体的子类进行实例化;
- 子类必须对父类(抽象类)中的所有抽象方法进行重写;
- 抽象类中可以定义非抽象方法;
- 子类如果不重写抽象类中的抽象方法,则该类还是为抽象类;
- 抽象类中可以有构造方法,用于子类访问父类时的数据初始化。
- abstract关键字不能和哪些关键字共存
private | 冲突 | abstract方法必须被子类重写,而private不能被继承,也就不能重写。 |
final | 冲突 | final修饰的方法,变量都不能修改,而abstract修饰的方法必须被重写。 |
static | 不能共存 | 无意义,static是静态的,abstract方法中无方法体。 |