多态
多态的代码体现:父类引用指向子类对象
多态的格式:
父类/接口 变量名 =new 子类/实现类();
多态的前提:
要有子父类的继承关系
父类引用指向子类对象
必须要用方法重写,否则多态将失去他的意义
特点:
调用子类重写后的方法
多态的子类可以用多个,调用的是每个子类重写后的方法
编译看父类(左边),运行看子类(右边)
当出现子父继承关系,或者接口实现类的实现关系后,代码可以按照多态的写法,
按照多态的写法时,成员变量和成员方法的访问规则和继承中是一样的
多态中成员变量的访问特点:
直接使用子类对象访问成员变量:等号左边是谁,优先使用谁,没有向上找 name,this,name,super,name
使用成员方法间接访问成员变量:方法属于谁,优先使用谁,没有向上找
多态中成员方法的访问特点:
new的 是谁,优先使用谁,没有向上找
多态的好处和弊端:
好处,多态中父类引用可以接受不同的子类,调用的是每个子类重写后的方法,扩展性强
弊端:此处子类对象表现为父类型态.不能调用子类特有的方法
向上转型:父类引用指向子类对象
多态的本身就是向上转型(把子类对象,当成父类变量使用)
格式:
父类/接口 变量名 = new 子类/实现类();
就像:默认类型转换,取值范围小的数据
可以直接赋值给取值范围大的变量
int a = 10;
double d = a;
2.向下转型:将父类变量,强制转换成子类对象
格式:
实现类/子类 变量名 = (实现类/子类)父类变量;
就像强制类型转换:
double d = 66.66;
int a = (int)d;
3.注意:
在进行向下转型时,如果目标类型和创建该对象时的类型不一致,就会出现类型转换异常
instanceof 关键字
格式:
booleab b=变量名称 instanceof 类名称
返回值:
b如果是true,表示该对象却是是有侧的类型
b如果是false,表示该对象去不是右侧的类型