首先引入一個問題,什麼是多态,所謂的 多态從字面意思的了解就是多種狀态.多态在我們的生活裡面是到處存在的。
比如比如一個很簡單的比方,就拿休息的方法來說,普通的人休息就是睡一覺,程式員休息就是ixie幾行代碼。等等
或出現不同的形式。多要就像一個函數,當輸入不同的參數,會得到不同的結果。下面我們來看看代碼來了解下什麼是多态
package TestModefine;
/**
* @author hackbase 多态的測試必須滿足三個條件
* 1.必須要又繼承
* 2.必須重寫父類的方法
* 3.父類的引用必須指向子類的對象
* 下面我們來看看代碼.
*/
public class Demo {
public static void main(String[] args) {
//一般動物交了一聲
Animal d=new Animal();
AnimalShutCry(d);
//當我們傳遞一個狗進去的時候,就會出現狗叫
Animal d2=new Dog();
AnimalShutCry(d2);
//當我們傳遞一個貓進去的時候,會自動的出現貓叫的現象/
Animal d3=new Cat();
//自動向上轉型。
AnimalShutCry(d3);
//向下轉型.
Dog b=(Dog)d2;
//強制向下轉型.
}
static void AnimalShutCry(Animal T){
T.shut();
}
static class Animal{
public void shut(){
System.out.println("叫了一聲");
}
}
static class Dog extends Animal{
@Override
public void shut(){
System.out.println("汪汪汪的叫了一聲.......");
}
}
static class Cat extends Animal{
@Override
public void shut() {
System.out.println("喵喵的叫了一聲......");
}
}
}
上面的代碼說的很i清楚,多态必須滿足三個條件1.又繼承的關系。2.重寫了父類的方法。3.父類的引用必須指向子類的一個對象.
着三個條件卻不可. 主要看看下面的代碼.
static void AnimalShutCry(Animal T){
T.shut();
}
上面代碼才是多态的關鍵,在方法的參數裡面,我們定義了一個父類的引用,當我們傳入不同的子類的時候JVM會根據不同的子類調用不同的方法。來看看代碼輸出的的結果。
public static void main(String[] args) {
//一般動物交了一聲
Animal d=new Animal();
AnimalShutCry(d);
//當我們傳遞一個狗進去的時候,就會出現狗叫
Animal d2=new Dog();
AnimalShutCry(d2);
//當我們傳遞一個貓進去的時候,會自動的出現貓叫的現象/
Animal d3=new Cat();
//自動向上轉型。
AnimalShutCry(d3);
//向下轉型.
Dog b=(Dog)d2;
//強制向下轉型.
}
當我們傳遞不同的動物進去的時候,JVM就會調用不同的方法,進而輸出不同的結果。着就是多态