本文目錄一覽:
Java 方法重寫問題
重寫: 重寫方法必須和被重寫方法具有 相同的 方法名、參數列表、和返回值類型。
必須和父類的參數列表相同為什麼:
上面說的不錯,是為了多態,重寫是多態的必要條件之一,多態說白了就是程序執行前(包括編寫代碼時和編譯.java源文件的時候)你調的是父類被重寫這方法,真正在運行時(程序執行以後),實際當中,動態綁定(在運行期間真正的new出該對象來,對象內部有一個指針,指向該對象重寫的寫個方法),調用的是子類重寫的這個方法。
方法的參數是形參,形參的作用是接收調用該方法時傳過來的實參,形參屬於局部變量,那麼毫無疑問方法內部是要使用這些個參數做一些事情的,重寫要求參數列表必須相同,如果不相同,那麼你調父類被重寫的這個方法,參數列表不同,那實際當中還執行子類這重寫方法,那不矛盾么?內部不混亂了么?參數對不上號,人家重寫方法內部要用這參數怎麼辦啊?
下面這個不太肯定,不過我還是說一下我的看法:
構造方法能不能被繼承,new一個子類對象出來的時候,子類對象裏面包含着一個父類對象,也就是說,父類對象的所有東西子類對象全部都擁有了,全部都繼承下來了,但是有些東西你是有擁有權,沒有使用權,比方說private的方法,構造方法是new一個對象的時候必然要調用的方法,初始化對象用的,這個方法比較特殊,不像一般的方法一樣,是為了做一件事兒,它就是new對象時候調的方法,我認為構造方法還是繼承下來了,但是你用不了,無法用子類對象的引用去調用構造方法。
Java 語言中方法重寫的本質?
1、在編譯階段,編譯器只知道對象的靜態類型,而不知道實際類型,因此只能在class文件中確定調用父類的方法。
2、在執行過程中,它將判斷對象的實際類型。如果實際類型實現了這種方法,它將被直接調用。如果沒有實現,它將根據繼承關係從下到上進行檢索。只要檢索到,它將被調用。如果沒有檢索到,它將被拋棄。
例如下面代碼中,Dog類是Animal類的子類,Dog類就重寫了Animal類的 eat() 方法,當調用Dog類的 eat() 方法時,控制台會打印 eating bread…
java中重寫方法應遵循哪些規則
A、重寫規則之一:
重寫方法不能比被重寫方法限制有更嚴格的訪問級別。
(但是可以更廣泛,比如父類方法是包訪問權限,子類的重寫方法是public訪問權限。) B、重寫規則之二:
參數列表必須與被重寫方法的相同。
重寫有個孿生的弟弟叫重載,也就是後面要出場的。如果子類方法的參數與父類對應的方法不同,那麼就是你認錯人了,那是重載,不是重寫。
C、重寫規則之三:
返回類型必須與被重寫方法的返回類型相同。
D、重寫規則之四:
重寫方法不能拋出新的異常或者比被重寫方法聲明的檢查異常更廣的檢查異常。但是可以拋出更少,更有限或者不拋出異常。
E、重寫規則之五:
不能重寫被標識為final的方法。
F、重寫規則之六:
如果一個方法不能被繼承,則不能重寫它。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/292136.html