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{@Overridepublic void go(Address address){System.out.println("Car to " + address.getName());}}Plane對于基類的實現:public class Plane extends Vehicle{@Overridevoid 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()方法,則調用的時候,就可以按照子類
的形式調用,本質上是父類的方法,但是子類重寫之后,就成了另一種方式,這就是多態。
以上就是小編為大家帶來的淺談java多態的實現主要體現在哪些方面的全部內容了,希望對大家有所幫助,多多支持武林網~
新聞熱點
疑難解答