多态
多态(polymorphism)具有表现多种形态的特征,更专业化的说话是同一个实现接口,使用不同的实例而执行不同的操作
多态
1、多态:同一个对象,在不同时刻体现出来的不同状态。
2、多态的前提:
1)要有继承关系或实现关系(接口);
2)要有方法重写;
3)要有父类或者父接口引用指向子类`Fu f= new Zi();
注意:形参实参形式的(形参父类实参子类)。
3、多态的分类:
1)具体类多态
class Fu{}
class Zi extends Fu{}
Fu f= new Zi()//父类引用指向子类
2)抽象类多态(常用)
abstract class Fu{}
class Zi extends Fu{}
Fu f= new Zi();//抽象父类引用指向子类
3)接口多态(常用)
interface Fu{}
class Zi implements Fu{}
Fu f= new Zi();//父接口引用指向子类
多态中成员访问特点
如,Fu f= new Zi();//左父类右子类
重点:成员方法,运行时,结果为子类重写的成员方法的结果。
- 成员变量:编译看左边,运行看左边。
- 构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
- 成员方法:编译看左边,运行看右边。(方法重写的意义)
- 静态方法:编译看左边,运行看左边。静态和类相关,算不上重写,所以访问还是左边的。
提醒:理解这些的时候要记得继承啊方法重写它们存在的意义所在。就好理解啦。
向上转型和向下转型
一、概念
向上转型是指将子类的实例赋值给父类类型的变量。
向下转型是指将父类的实例赋值给子类类型的变量。
二、向上转型
1、向上转型后父类的引用所指向的属性是父类的属性。
2、如果子类重写了父类的方法,那么父类引用指向的或者调用的方法是子类的方法,这个叫动态绑定(实现多态)。
3、父类引用不能调用子类自己的方法。
4、向上转型会丢失子类的新增方法,同时会保留子类重写的方法。
三、向下转型
编译时需要强制类型转换,father前面的必须添加(Son)。
运行时会出现java.lang.ClassCastException错误,可使用instanceof来避免出错此类错误。
向下转型可以得到子类的所有方法(包含父类的方法)。