多态:同一个引用类型,使用不同实例而执行不同操作。
多态的实现:
-编译时多态:编译阶段,该对象属于哪个类,则调用哪个类的方法
public class Master {
public void feed(Pet pet){
pet.eat();
}
}
public abstract class Pet {
public abstract void eat();
}
-运行时多态:运行阶段,根据对象的引用找到堆中实际类的对象,调用实际的方法的原型
public class Dog extends Pet {
@Override
public void eat() {
System.out.println("狗吃狗粮...");
}
}
public class Cat extends Pet {
@Override
public void eat() {
System.out.println("猫吃🐟...");
}
}
public class Test {
public static void main(String[] args) {
Master master = new Master();
Pet dog = new Dog();
Pet cat =new Cat();
master.feed(dog);
master.feed(cat);
}
}
*多态对象转型问题
1、子对象转换为父对象
Pet dog = new Dog();
2、父对象转换为子对象[ClassCastException]
Pet pet = new Snake();
if(pet instanceof Dog){
Dog dog = (Dog)pet;
dog.band();
}