父類和子類繼承中方法調用的問題
請問在java入門第二季3-4,1分44秒
在測試類中只創建了子類對象,為什么在測試類里沒有調用父類和子類中的方法,結果里面父類的Animal()方法和子類里面的Dog()方法執行了,而父類中同一級別的eat()沒有執行?
而是eat()方法要在測試類中調用才能執行?
請問在java入門第二季3-4,1分44秒
在測試類中只創建了子類對象,為什么在測試類里沒有調用父類和子類中的方法,結果里面父類的Animal()方法和子類里面的Dog()方法執行了,而父類中同一級別的eat()沒有執行?
而是eat()方法要在測試類中調用才能執行?
2017-12-04
舉報
2017-12-05
兄弟,才學編程不久吧。。。要想了解原理是需要自己去看書或者網上查資料的,廢話不多說,解釋如下:
????你說的Animal()和Dog()叫做午餐構造函數,Dog類是Animal的子類,在創建dog對象時候,系統會默認初始化,也就是調用類內的構造函數,如果你沒有重寫構造函數,系統會自動調用默認的無參構造函數進行對象的初始化,由于繼承關系,會首先調用Animal(),再調用Dog(),這是構造函數的調用順序,如果實在理解不了,你就可以想象一下,一個子類,繼承了父類,子類里是要有父類的屬性的,所以需要將父類繼承的屬性先初始化,再初始化自己的屬性,已達到創建對象完整初始化的目的,如果還是不懂,就再看一遍視頻,業精于勤。。。
????再說一下eat(),這個方法基于重寫的普通方法,如果你自己不用父類的對象主動調用,子類的對象調用eat()的話,系統是不會像調用構造函數一樣先調用父類的eat()的,這個就相當于你和你父親,都需要吃飯,但是你父親喜歡吃魚,你喜歡吃肉一樣,不能說你自己一個人吃飯,還得必須讓你父親先吃魚的道理。。。
????純手打,如果還有什么不懂,大家互相學習。。。
????