通俗的说,一只猫是一个动物;一条狗也是一个动物,这是大自然的多样性。而在java中这种机制被称作多态,也有人把它叫做向上转型。你可能会问有没有向下转型?那么我问你,动物是一只猫,动物是一条狗,这样的表述是否正确?答案自然也就显而易见了。
在java中,一个Animal可以作为一个父类也可以作为一个接口被Cat类、Bird类来继承或实现。
以下用一个小例子来加深你的印象:
abstract class Animal{
public abstract int numOfLegs();
}
class Bird extends Animal{
@Override
public int numOfLegs() {
return 2;
}
}
class Cat extends Animal{
@Override
public int numOfLegs() {
return 4;
}
}
public class TestPolymorphic {
public static void main(String[] args) {
Animal a1=new Bird();
System.out.println("一只"+a1.getClass().getName()+"有"+a1.numOfLegs()+"条腿");
Animal a2=new Cat();
System.out.println("一只"+a2.getClass().getName()+"有"+a2.numOfLegs()+"条腿");
}
}
输出结果:
-------------------------------------------------
一只Bird有2条腿
一只Cat有4条腿
-------------------------------------------------
可能你会说干嘛要这么麻烦,直接Bird b1=new Bird();不就完了嘛。这叫牵扯到设计模式了。
下面来讲讲为什么要用多态?(以下内容为转载)
因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
若想更深的了解父类引用指向子类对象请点击:http://blog.csdn.net/xuejingfu1/article/details/51497481