2020-06-20多态
2020-06-21 本文已影响0人
智障猿
多态
- 多态概述
同一个对象,在不同时刻表现出不同的形态 - 多态的前提和体现
①有继承/实现关系
②有方法重写
③有父类/接口引用指向子/实现类对象(Animal animal = new Cat();) - 多态中成员的访问特点
①成员变量:编译看左边,执行看左边
②成员方法:编译看左边,执行看右边
因为成员方法有重写的机制,而成员变量没有 - 多态的好处和弊端
好处:提高了程序的拓展性(定义方法 的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类参与操作)
弊端:不能使用子类的独有的方法 - 多态的形式
具体类多态,抽象类多态,接口多态
使用多态的例子
- 父类Animal
public class Animal {
public void eat(){
System.out.println("吃食物");
}
}
- 子类Cat、Dog、Pig
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼!");
}
public void play(){
System.out.println("玩游戏");
}
}
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃骨头!");
}
}
- 操作类AnimalOperator
public class AnimalOperator {
public void operator(Animal animal){
//传入cat对象时相当于Animal animal = new Cat();
//传入dog对象时相当于Animal animal = new Dog();
animal.eat();//编译看左边,执行看右边
//animal.play()
}
}
- 测试类AnimalDemo
public class Demo {
public static void main(String[] args) {
AnimalOperator animalOperator = new AnimalOperator();
Cat cat = new Cat();
animalOperator.operator(cat);
Dog dog = new Dog();
animalOperator.operator(dog);
}
}
- 执行结果
猫吃鱼!
狗吃骨头!
多态的转型
- 向上转型
从子到父
父类引用指向子类对象
不能使用子类中独有的方法 - 向下转型
从父到子
父类引用转为子类对象
可以使用子类中独有的方法(强制转换)