多态指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送的对象不同而采用不同的方式。
多态存在的三个必要条件:1.继承;2.重写;3.父类引用指向子类对象。
举个栗子:
父类和子类的创建:
public class Animal{
public void cry(){
System.out.println("noting");
}
}
public class Dog extends Animal{
public void cry(){
System.out.println("wangwang");
}
}
public class Cat extends Animal{
public void cry(){
System.out.println("miaomiao");
}
}
多态性:
public static void main(String[] args){
Cat cat = new Cat();
cat.cry();
Dog dog=new Dog();// 分别创建了dog 和cat的对象
dog.cry();
Animal a = new Animal();
//父类中的cry()方法,输出noting
a.cry();
//父类引用指向子类对象
Animal b = new Cat();
//这里执行的是cat中的cry(),该方法在子类cat中重写,覆盖了父类中的cry(),输出miaomiao
b.cry();
Animal c=new Dog();
//这里执行的是dog中的cry(),该方法在子类dog中重写了,输出wangwang
c.cry();
}
java多态的优势:
可替换性、可扩充性(增加新的子类不影响已经存在类的多态性、继承性)、接口性(多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现)、灵活性、简化性等。