多态:同一个对象,在不同时刻表现出来的不同形态。
例如:我们可以说波斯猫是猫,我们也可以说波斯猫是动物,这里的波斯猫就在不同时刻表现出了不同的形态,这就叫做多态。
多态的前提和体现:
(1)有继承/实现关系;(2)有方法重写;(3)有父类引用指向子类对象
多态中成员访问的特点:
成员变量:编译看左边,执行看左边
成员方法:编译看左边,执行看右边
访问成员变量和成员方法为什么不同:因为成员方法有重写,而成员变量没有重写。
多态的好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类参与操作
多态的弊端:不能使用子类的特有功能
多态的转型:
向上转型:从子到父,父类引用指向子类对象
向下转型:从父到子,父类引用转为子类对象(利用子类对象强制转型)
package duotai_practice2;
public class animal {
public void eat(){
System.out.println("吃吃吃!");
}
}
package duotai_practice2;
public class cat extends animal {
@Override
public void eat() {
System.out.println("猫吃鱼!");
}
}
package duotai_practice2;
public class dog extends animal{
@Override
public void eat() {
System.out.println("狗吃骨头!");
}
}
package duotai_practice2;
public class pig extends animal{
@Override
public void eat() {
System.out.println("猪吃白菜!");
}
}
package duotai_practice2;
public class animal_operator {
public void animals_operator(animal a){
a.eat();
}
}
package duotai_practice2;
public class test {
public static void main(String[] args) {
animal_operator ao = new animal_operator();
cat c = new cat();
dog d = new dog();
pig p = new pig();
ao.animals_operator(c);
ao.animals_operator(d);
ao.animals_operator(p);
}
}