多态概念
同一个对象,在不同时刻表现出的不同形态叫做多态
多态得前提条件
- 有继承/实现关系
- 有方法重写
- 有父类引用指向子类对象
有如下代码
//定义了一个动物类
public class Animal{
public int age=40;
public void eat(){
sout("动物吃肉");
}
}
//定义了一个猫类继承动物类
public class cat extends Animal {
public int age=20;
public int weight=10;
@override
public void eat(){
sout("猫吃鱼");
}
public void play(){
sout("毛线团");
}
}
public class Demo{
public static void main(String [] args){
Animal a = new Cat();
sout(a.weight); //会报错
sout(a.age); //结果为40;
sout(a.play());//会报错
sout(a.eat());//输出结果为猫吃鱼
}
}
由此可得 多态访问成员的特点为:
- 访问成员变量时,编译通不通过看左边(父类)是否存在这个变量,运行结果也是看左边得变量值为多少。
- 访问成员方法时,编译通过不通过看左边是否存在这个方法,但是运行结果输出的是右边(子类)方法中得结果.
- 为什么会这样呢? 因为成员方法有重写,而成员变量没有
多态的好处和弊端
- 多态的好处:提高了程序的扩展性,
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作 - 多态的弊端:不能使用子类得特有功能
多态中的转型
- 向上转型:从子到父,父类引用指向子类对象
Animal a = new cat();
- 向下转型:从父到子,父类引用转为子类对象
Cat c = (Cat)a; //强制转换后赋值给c