public class TestFeed {
/*
* 多态的概念:在既定的场合表现出来的多种形态
*
* 使用多态的方式:
* 1.将方法中的形参用父类对象指定
* 2.子类重写父类中的相关方法
* 3.使用时传入子类对象
*
* 还可以将父类作为返回类型实现多态
*
*/
public static void main(String[] args) {
PetOwner po = new PetOwner();
/*Dog dog = new Dog();
po.feed(dog);
Cat cat = new Cat();
po.feed(cat);*/
//向上转型,将子类对象转为父类对象
/*
* 向上转型时,子类会自动完成转换
*
*/
Pet p1 = new Dog();
Pet p2 = new Cat();
/*子类除了从父类继承方法或重写相关方法之外
* 还可以有属于自身的方法
* 如果用了向上转型,那么此时的子类对象就已经变成了
* 父类对象,这个时候时不能调用子类那个属于自己的方法了
* 如果要用则必须将对应的这个父类降级(向下转型)为子类对象
*
* 向下转型需要进行强制类型转型
* 注意:如果对应的父类类型和子类类型不匹配就会抛异常
* java.lang.ClassCastException(类抛出了异常)
*
* 可以通过 instanceof关键字来对需要转换的父类对象进行判断
* 看它是否是属于某个子类的一个实例(对象)
*
* 对象 instanceof 类或者接口
*
* 判断当前对象是否是后面对应的类或接口的一个实例
* 如果是是返回true,否则返回false
*
*
*/
if (p2 instanceof Dog) {
Dog dog = (Dog) p2;
dog.guardYard();
} else {
System.out.println("对象p2不是狗的一个实例对象,不能完成强转");
}
po.feed(p1);
//Pet p = po.getPetById(1); // Pet p = new Dog();
}
}