多态
多态,polymorphism 即多种形态,模糊策略,以不变应万变,使用多态可以编写更加通用的代码。
静态绑定和动态绑定
静态绑定(静态联编): 在编译期完成,可以提高代码执行速度。静态绑定的方法包括:
- 静态方法
- 构造器
- private方法
- 用关键字super 调用的方法
动态绑定(动态联编):指在“执行期间(而非编译期间)” 判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 这虽然让我们编程灵活,但是降低了代码的执行速度。
实现多态的条件
要发生多态有三个必要条件:要有继承,要有重写,父类引用指向子类对象
对象转型
一个基类的引用类型变量可以“指向”其子类的对象。
一个基类的引用不可以访问其子类对象的新增成员(包括属性和方法)。
子类对象可以当作基类的对象来使用,称作向上转型(upcasting),反之称为向下转型(downcasting)
instanceof
向下转型—强制转换,是有风险的, 可能会出现类型转换异常ClassCastException,为了降低这种风险性,我们可以使用Java中的instance运算符,在强转前进行一次判断
抽象类
用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。
含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写
抽象类不能被实例化
抽象方法只需声明而不需要实现
抽象类的定义:
A:抽象方法定义的格式:
public abstract 返回值类型 方法名(参数);
B: 抽象类定义的格式:
abstract class 类名 {
}
接口
接口中声明属性默认为 public static final 的,也只能是public static final的;
接口中只能定义抽象方法,而且这些方法默认为public的,也只能是 public的
接口可以继承其他的接口,并添加新的属性和抽象方法
接口不能实现另一个接口,但可以继承多个其它接口
定义格式:
interface Flyanimal{
void fly();
}