[TOC]
## **多態**
多態:是指對象的多態,一個對象的多種狀態
```
比如:一只狗 是狗 ,是動物,是生物
比如 一個人 是人,是動物,是生物
比如 你在學校是學生,在家里是兒子,在公司是員工,在外面是老大
```
在Java中多態.
### **前提:**
**1.必須有父子關系(必須有繼承)
2.必須有方法的重寫**
### **多態在Java中表現:**
1.父類類型 變量名 = new 子類類型();
父類類型的變量指向了子類
```
例如:public class Animal{}
public class Dog extends Animal{}
public class BigYellowDog extends Dog{}
代碼體現
Dog d = new Dog();
Animal an = new Dog();
例,多態形式創建一個大黃狗對象
Dog d = new BigYellowDog();
2.接口類型 變量名= new 實現類();
USbInterface mm = new Mouse();
USEBIterface bb = new keyBoard();
```
### **多態中注意事項**
```
1.使用多態調用成員變量
編譯時,看父類的左邊
運行時,還是看父類的左邊
2使用多態調用成員方法
編譯時看父類左邊
運行時看子類,右邊
```
### **多態的好處和弊端**
只能調用子父類共有的方法才能調用
好處:提供程序靈活性
弊端 不能調用子類特有的方法
案例 定義三個方法,喂貓.喂豬,喂狗
### **總結:**
```
父類類型的變量,可以接收任何一個子類的對象
調用方法的時候,編譯看父類,運行時 運行的是傳遞過來的子類對象中的方法
```
### **案例**
~~~
//多態類
public class Duotai {
public static void main(String[] args) {
//Animal an = new Dog();
//System.out.println(an.age);
//an.eat();
//豬吃飯
Pig pp =new Pig();
feedAnimal(pp);
}
public static void feedAnimal(Animal an){//Animal an = new Pig();
System.out.println("小寶貝,來吃飯");
an.eat();
}
}
~~~
~~~
//豬類繼承動物吃飯
public class Pig extends Animal{
public void eat(){
System.out.println("豬豬吃飯了");
}
}
~~~
~~~
//動物抽象類
public abstract class Animal {
public abstract void eat();
}
~~~