java多型的實現主要體現在哪些方面
阿新 • • 發佈:2019-01-29
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中的多型也可以理解成這個意思,就是:
將父物件設定成為和一個或多個它的子物件相等的技術,
比如Parent=Child;
多型性使得能夠利用同一類(父類)引用不同類的物件,
以及根據所引用物件的不同,以不同的方式執行相同的操作。
多型實現包括兩種方式:過載和重寫
例如:Animal a = new Tiger(); 這是一個老話題了,呵呵……
父類引用指向子類物件,Animal類中包含一個eat()方法,而Tiger類繼承自
Animal類,如果子類重寫了父類的eat()方法,則呼叫的時候,就可以按照子類
的形式呼叫,本質上是父類的方法,但是子類重寫之後,就成了另一種方式,
這就是多型。
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()方法,則呼叫的時候,就可以按照子類
的形式呼叫,本質上是父類的方法,但是子類重寫之後,就成了另一種方式,
這就是多型。