java多態的實現主要體現在哪些方面

thinking in java3中的多態
People are often confused by other, non-object-oriented features of Java, like method overloading, which are sometimes presented as object-oriented. Don’t be fooled: If it isn’t late binding, it isn’t polymorphism


按文面翻譯
人們總是被java的另一種非面向對象的特性所困惑,就像方法重載,有時候它以面向對象而存在,請不要犯傻,如果沒有後期綁定(也就是運行期的動態綁定),它就不是多態.

所以,這段話要表達的意思就是說,多態要有動態綁定,否則就不是多態,方法重載也不是多態(因爲方法重載是編譯期決定好的,沒有後期也就是運行期的動態綁定)

當滿足這三個條件 1.有繼承  2. 有重寫  3. 要有父類引用指向子類對象


<span style="font-size:14px;"> 

例:
public class Address {
private String name;
public Address(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

定義基類(抽象類):
public abstract class Vehicle {
abstract void go(Address address);
}

Car對於基類的實現:
public class Car extends Vehicle{
@Override
public void go(Address address){
System.out.println("Car to " + address.getName());
}
}

Plane對於基類的實現:
public class Plane extends Vehicle{
@Override
void go(Address address) {
System.out.println("Plane to " + address.getName());
}
}


Driver中多態:
public void drive(Vehicle v){ ///多態,父類引用指向子類對象,實際傳過來的是抽象類Vehicle的子類,或者實現類,然後編譯器會根據具體實現類,來找實現方法。
v.go(new Address("杭州(abstract)")); ///此方法在具體的實現中被重寫
}

Test:
public static void main(String[] args) {
Driver d = new Driver();
d.drive(new Plane()); //實際是Plane對象,則編譯器就會找到Plane中,對go的實現
d.drive(new Car()); //實際是Car對象,則編譯器就會找到Plane中,對go的實現
}

輸出結果:
Plane to 杭州(abstract)
Car to 杭州(abstract)

</span>

多態:就是指相同的事物的不同狀態,比如:水。水可以有三種狀態:
氣體、液體和固體。那麼在JAVA中的多態也可以理解成這個意思,就是:
將父對象設置成爲和一個或多個它的子對象相等的技術,
比如Parent=Child;
多態性使得能夠利用同一類(父類)引用不同類的對象,
以及根據所引用對象的不同,以不同的方式執行相同的操作。
多態實現包括兩種方式:重載和重寫
例如:Animal a = new Tiger(); 這是一個老話題了,呵呵……
父類引用指向子類對象,Animal類中包含一個eat()方法,而Tiger類繼承自
Animal類,如果子類重寫了父類的eat()方法,則調用的時候,就可以按照子類
的形式調用,本質上是父類的方法,但是子類重寫之後,就成了另一種方式,
這就是多態。

發佈了628 篇原創文章 · 獲贊 283 · 訪問量 300萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章