//--------多态的好处---------
Cat c = new Cat();
// c.eat();
Dog d1 = new Dog();
Dog d2 = new Dog();
Dog d3 = new Dog();
// d.eat();
method(c);
method(d1);
}
public static void method(Animal a)//Animal a = new Cat(); 或者 Animal a = new Dog();
{
a.eat();
}
/*
public static void method(Dog d)
{
d.eat();
}
public static void method(Cat d)
{
d.eat();
}
*/
多态性:
Animal a = new Cat();//向上转型(类型提升)。子类对象提升为了父类型。
/*
提升的好处:就是提高了扩展性。隐藏了子类型。
提升的局限性:只能使用父类中的方法。 如果子类有覆盖的话,运行的是子类的内容。
//如何使用抓老鼠行为。
Cat c = (Cat)a;//向下转型(强制类型转换)。好处:可以使用具体子类型的特有方法。
c.catchMouse();
// 向下转型需要注意:父类型向下转成子类型,因为子类型不唯一,所以,需要进行判断。
Animal an = new Cat();
// 如何判断对象类型呢? 用到一个关键字完成,instanceof 对象 instanceof 类or接口
// 记住:一旦向下转型,必须先instanceof判断
if(an instanceof Dog)
{
Dog d = (Dog)an;// ClassCastException -类型转换异常
d.lookHome();
}else if(an instanceof Cat)
{
Cat c = (Cat)an;
c.catchMouse();
}
//记住:对于子父类转型动作,自始自终都是子类对象在做着类型的转换而已。