通過實例分析java多態(tài)
這篇文章主要介紹了通過實例分析java多態(tài),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
首先來看這樣的一段代碼,其中對于類的定義如下:
class Parent{ public int myValue=100; public void printValue() { System.out.println("Parent.printValue(),myValue="+myValue); } } class Child extends Parent{ public int myValue=200; public void printValue() { System.out.println("Child.printValue(),myValue="+myValue); } }
我們來一個一個的回答問題:
1.運行結(jié)果如圖
2.對于這個運行結(jié)果的解釋,第一行第二行都是正常的調(diào)用,第三行中,將child賦給了parent 再進(jìn)行的輸出,這時候我們發(fā)現(xiàn)結(jié)果變成了200 并且輸出語句也變了。
第四句,執(zhí)行了parent.myValue++;但結(jié)果并沒有改變。第五行中,將parent類強行轉(zhuǎn)換為子類后又進(jìn)行了自增,結(jié)果變成了201.
3.對于這里的分析,我們發(fā)現(xiàn)子類賦值給父類是沒有問題的,也就是說子類完全可以直接轉(zhuǎn)換成父類。第四行的語句結(jié)果還是200,說明他對于myValue的++還是調(diào)用了父類中的Value,但最后還是輸出了子類的Value.說明子類賦給父類后,只是一部分替代,并不是完全覆蓋。第五句里,將父類轉(zhuǎn)換成子類然后進(jìn)行++,第四句第五句結(jié)合起來,可以說明子類賦值給父類,并不是所謂的覆蓋,只是把原本的東西給隱藏了罷了。而強制轉(zhuǎn)換后則不同,直接變成了子類。
最后,這其實告訴我們在實際應(yīng)用中,我們不應(yīng)該把父類和子類設(shè)置成相同的源代碼和成員變量,對于程序員在編程時的理解十分不利。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中使用print、printf、println的示例及區(qū)別
Java?的輸出方式一般有這三種,print、println、printf,它們都是?java.long?包里的System類中的方法,本文重點給大家介紹Java中使用print、printf、println的示例,需要的朋友可以參考下2023-05-05Java中BigDecimal,DateFormatter?和迭代器的"陷阱"
這篇文章主要介紹了Java中BigDecimal,DateFormatter?和迭代器的"陷阱",文章圍繞主題展開詳細(xì)的內(nèi)容介紹,感興趣的小伙伴可以參考一下2022-06-06Spring MVC 中獲取session的幾種方法(小結(jié))
這篇文章主要介紹了Spring MVC 中獲取session的幾種方法(小結(jié)),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09SpringBoot統(tǒng)一返回JSON格式實現(xiàn)方法詳解
這篇文章主要介紹了SpringBoot統(tǒng)一返回JSON格式實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02