1. 引用多态
父类的引用可以指向本类的对象
Animal obj1 = new Animal();
父类的引用可以指向子类的对象
Animal obj2 = new Dog();
2. 方法多态
创建本类对象时,调用的方法为本类方法
obj1.eat(); // 动物具有吃的能力
创建子类对象时,调用的方法为子类重写的方法或者继承的方法
obj2.eat(); // 狗具有吃的能力
3. 应用类型转换
3.1. 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
Dog dog = new Dog();
Animal animal = dog; // 自动类型提升 向上类型转换
3.2. 向下类型转换(强制类型转换),是大类型到小类型
Dog dog2 = (Dog)animal; // 向下类型转换 强制类型转换
3.3. instanceof运算符,来解决引动对象的类型,避免类型转换的安全性问题
if (animal instanceof Cat) {
Cat cat = (Cat)animal;
} else {
System.out.println("无法进行类型转换");
}
4. 抽象类
4.1. 语法定义
使用abstract关键字修饰
public abstract class *** {...}
public abstract void ***() ;
继承后的实现
@Override
public void ***() {...}
4.2. 应用场景
4.2.1. 在某些情况下,某个父类只是知道子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
4.2.2. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
4.3. 作用
限制规定子类必须实现某些方法,但不关注实现细节
4.4. 使用规则
4.4.1. abstract定义抽象类
4.4.2. abstract定义抽象方法,只有声明,不需要实现
4.4.3. 包含抽象方法的类是抽象类
4.4.4. 抽象类中可以包含普通的方法,也可以没有抽象方法
4.4.5. 抽象类不能直接创建, 可以定义应用变量
5. 接口
5.1. 概念
接口可以理解为一种特殊的类,由全局变量和公共的抽象方法所组成。
类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。
5.2. 定义
ininterface关键字定义接口
[修饰符] [abstract] interface 接口名 [extends 父接口1, 父接口2...] { // 修饰符建议使用public // abstract关键字可隐式的表示,即可写可不写
零个到多个常量定义
[public static final] // 修饰符可隐式表示
零个到多个抽象方法的定义
[public abstract] // 修饰符可隐式表示
}
5.3. 使用接口
一个类可以实现一个或多个接口,实现接口使用implements关键字。
[修饰符] class 类名 extends 父类 implements 接口1, 接口2, ...{...}
IPlayGame ip1 = new SmartPhone();
ip1.playGame();