/*
多态就是一种事物具有多种形态
比如:
汽车:跑车,货车,大巴。
动物:狗,猫,羊。
多态的体现
父类的引用指向了子类。
父类的引用也可以接收子类自己的对象
多态的前提
父类与子类之间必须具有继承或实现的中一个的一个关系。
多态的好处
提高代码的扩展性。
*/
//以下用动物做一个多态的实例
abstract class Animal
{
abstract void eat();
}
class Dog extends Animal
{
public void eat()
{
System.out.println("啃骨头");
}
public void protectHome()
{
System.out.println("汪,汪");
}
}
class Cat extends Animal
{
public void eat()
{
System.out.println("吃鱼");
}
public void catchMouse()
{
System.out.println("抓老鼠");
}
}
class duotaiDemo1
{
public static void main(String[] args)
{
/* Dog d=new Dog();
d.eat();
d.protectHome();
Cat c=new Cat();
c.eat();
c.catchMouse();
以上是未应用多态时的做法
*/
function(new Dog()); //应用多态
function(new Cat());
Animal d=new Dog(); //此种做法叫子类类型的提升
d.eat();
Dog h=(Dog)d; //此做法叫做子类类型的向下转换,以调用Dog特有的方法
h.protectHome();
/*
Animal a=new Animal();
Dog d=(Dog)a;
此种做法是错误的,父类对象不能向下转换,只能子类对象向子类自己或父类转换。
多态改变的过程,始终都是子类对象在改变。
*/
}
public static void function(Animal a) //应在main方法外定义。原因是main方法是静态,
{
a.eat();
}
/*如果要调用Dog中特有方法怎么办?
应用instanceof关键字判断对象类型, 用法 (对象 instanceof 类型) 如果正确则返回true 否则返回false;
public static void function(Animal a)
{
a.eat();
if(a instanceof Dog)
{
Dog d=(Dog)a;
d.protectHome();
}
else if(a instanceof Cat)
{
Cat c=(Cat)c;
c.catchMouse();
}
}
*/
}