淺談java多態(tài)的實現(xiàn)主要體現(xiàn)在哪些方面
thinking in java3中的多態(tài)
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的另一種非面向?qū)ο蟮奶匦运Щ?就像方法重載,有時候它以面向?qū)ο蠖嬖?請不要犯傻,如果沒有后期綁定(也就是運行期的動態(tài)綁定),它就不是多態(tài).
所以,這段話要表達的意思就是說,多態(tài)要有動態(tài)綁定,否則就不是多態(tài),方法重載也不是多態(tài)(因為方法重載是編譯期決定好的,沒有后期也就是運行期的動態(tài)綁定)
當滿足這三個條件 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對于基類的實現(xiàn): public class Car extends Vehicle{ @Override public void go(Address address){ System.out.println("Car to " + address.getName()); } } Plane對于基類的實現(xiàn): public class Plane extends Vehicle{ @Override void go(Address address) { System.out.println("Plane to " + address.getName()); } } Driver中多態(tài): public void drive(Vehicle v){ ///多態(tài),父類引用指向子類對象,實際傳過來的是抽象類Vehicle的子類,或者實現(xiàn)類,然后編譯器會根據(jù)具體實現(xiàn)類,來找實現(xiàn)方法。 v.go(new Address("杭州(abstract)")); ///此方法在具體的實現(xiàn)中被重寫 } Test: public static void main(String[] args) { Driver d = new Driver(); d.drive(new Plane()); //實際是Plane對象,則編譯器就會找到Plane中,對go的實現(xiàn) d.drive(new Car()); //實際是Car對象,則編譯器就會找到Plane中,對go的實現(xiàn) } 輸出結(jié)果: Plane to 杭州(abstract) Car to 杭州(abstract) </span>
多態(tài):就是指相同的事物的不同狀態(tài),比如:水。水可以有三種狀態(tài):
氣體、液體和固體。那么在JAVA中的多態(tài)也可以理解成這個意思,就是:
將父對象設置成為和一個或多個它的子對象相等的技術(shù),
比如Parent=Child;
多態(tài)性使得能夠利用同一類(父類)引用不同類的對象,
以及根據(jù)所引用對象的不同,以不同的方式執(zhí)行相同的操作。
多態(tài)實現(xiàn)包括兩種方式:重載和重寫
例如:Animal a = new Tiger(); 這是一個老話題了,呵呵……
父類引用指向子類對象,Animal類中包含一個eat()方法,而Tiger類繼承自
Animal類,如果子類重寫了父類的eat()方法,則調(diào)用的時候,就可以按照子類
的形式調(diào)用,本質(zhì)上是父類的方法,但是子類重寫之后,就成了另一種方式,這就是多態(tài)。
以上就是小編為大家?guī)淼臏\談java多態(tài)的實現(xiàn)主要體現(xiàn)在哪些方面的全部內(nèi)容了,希望對大家有所幫助,多多支持腳本之家~
相關(guān)文章
帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之數(shù)組
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之數(shù)組,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01Spring中BeanFactoryPostProcessors是如何執(zhí)行的
BeanFactoryPostProcessor是Spring容器提供的一個擴展機制,它允許開發(fā)者在Bean的實例化和初始化之前對BeanDefinition進行修改和處理,這篇文章主要介紹了你知道Spring中BeanFactoryPostProcessors是如何執(zhí)行的嗎,需要的朋友可以參考下2023-11-11JAVA面試題之Forward與Redirect的區(qū)別詳解
這篇文章主要給大家介紹了在JAVA面試中可能遇到會遇到的一道題,就是java中Forward與Redirect兩者之前的區(qū)別,文中介紹的非常詳細,對大家具有一定參考學習價值,需要的朋友們下面來一起看看吧。2017-05-05SpringBoot+WebSocket實現(xiàn)即時通訊功能(J2EE方式)
WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,WebSocket使得客戶端和服務器之間的數(shù)據(jù)交換變得更加簡單,允許服務端主動向客戶端推送數(shù)據(jù),本文給大家介紹了SpringBoot+WebSocket實現(xiàn)即時通訊功能(J2EE方式),需要的朋友可以參考下2025-01-01解決@Validated注解無效,嵌套對象屬性的@NotBlank無效問題
這篇文章主要介紹了解決@Validated注解無效,嵌套對象屬性的@NotBlank無效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10