多态,又叫动态绑定,是指程序在执行期间(而非编译期间),判断所引用的对象的实际类型,根据其实际的类型调用其相应的方法.
多态存在有三个必要的条件:
1. 有继承
2. 有重写
3. 父类引用指向子类对象
举个例子来说,有个父类 Animal,代码如下:
package com.poly;
public class Animal {
private String name;
Animal(String name){
this.name = name;
}
public void enjoy(){
System.out.println("Animal enjoy...");
}
}
他有一个子类,Cat
package com.poly;
public class Cat extends Animal{
private String eyeColor;
Cat(String name,String eyeColor){
super(name);
this.eyeColor = eyeColor;
}
public void enjoy(){
System.out.println("Cat's enjoy...");
}
}
他还有另外一个子类, Dog
package com.poly;
public class Dog extends Animal {
private String furColor;
Dog(String name,String furColor){
super(name);
this.furColor = furColor;
}
public void enjoy(){
System.out.println("Dog's enjoy...");
}
}
现在有一个类,Lady,他的成员变量里面有Animal
package com.poly;
public class Lady {
private String name;
private Animal pet;
public Lady(String name,Animal pet){
this.name = name;
this.pet = pet;
}
public void myPetEnjoy(){
pet.enjoy();
}
}
现在我们测试一下,
package com.poly;
public class Test {
public static void main(String[] args){
String name1 = "Grace";
String name2 = "Lucy";
Dog d = new Dog("Dog","yellow");
Cat c = new Cat("Cat","blue");
Lady l1 = new Lady(name1,c);
Lady l2 = new Lady(name2,d);
l1.myPetEnjoy();// cat's enjoy
l2.myPetEnjoy();// dog's enjoy
}
}
此处打印出来的应该是:
Cat's enjoy...
Dog's enjoy...
这个就是多态的最简单的应用。多态可以提高程序的健壮性和可扩展性。