基本概念
可以理解為一個(gè)事物的多種形態(tài)
對(duì)象的多態(tài)性:父類的引用指向子類的對(duì)象(或,子類的對(duì)象賦給父類的引用)。
多態(tài)的使用--虛擬方法調(diào)用
在編譯時(shí),只能調(diào)用父類中聲明的方法;
在運(yùn)行時(shí),實(shí)際執(zhí)行的是子類重寫的父類的方法
即,編譯看左邊,執(zhí)行看右邊
虛擬方法定義:子類定義了與父類同名同參的方法,多態(tài)情況下,此時(shí)父類的方法稱為虛擬方法。父類根據(jù)賦給它的不同子類對(duì)象,動(dòng)態(tài)調(diào)用屬于子類的該方法。
幾點(diǎn)說明
1、父類對(duì)象只能調(diào)用父類有的方法,不能調(diào)用子類特有的方法

2、對(duì)象的多態(tài)性,只適用于方法,不適用于屬性
使用前提
1、必須有類的繼承關(guān)系
2、需要有方法的重寫
代碼舉例:
public class AnimalTest {
????public static void main(String[] args) {
????????AnimalTest test = new AnimalTest();
????????test.fun(new Dog());
????????System.out.println("*********");
????????test.fun(new Cat());
????????System.out.println("*********");
????????Animalanimal=newCat();
????????//animal.play();
????????//不適用于方法
????????Animal animal2 = new Dog();
????????System.out.println(animal2.name);//Animal
????}
????public void fun(Animal animal) {
????????animal.eat();
????????animal.shout();
????}
}
class Animal{
????String name = "Animal";
????public void eat() {
????System.out.println("animals need food");
}
public void shout() {
????System.out.println("animals can shout");
????}
}
class Dog extends Animal{
????String name = "DOGS";
????public void eat() {
????System.out.println("Dogs need eat food for dog");
}
public void shout() {
????System.out.println("Dogs shout like wah wah wah");
????}
}
class Cat extends Animal{
????public void eat() {
????System.out.println("Cats like to eat fish");
}
public void shout() {
????System.out.println("Cats shout like meo meo meo");
}
public void play() {
????System.out.println("Cats like play with butterfly");
????}
}