相同的封裝實例的超類內的子類可以覆蓋未聲明的私人或最終任何超類方法。
不同包中的子類只能覆蓋聲明爲public或protected的非final方法。
的區別是什麼關係嗎?如果方法不聲明爲private,那麼它必須是公共的或受保護的不是嗎?
相同的封裝實例的超類內的子類可以覆蓋未聲明的私人或最終任何超類方法。
不同包中的子類只能覆蓋聲明爲public或protected的非final方法。
的區別是什麼關係嗎?如果方法不聲明爲private,那麼它必須是公共的或受保護的不是嗎?
其實沒有。
方法可以是公開的,保護的,私人的或包私人。 如果您未指定訪問修飾符,則此方法爲包私有。
很明顯,爲什麼來自不同包的類不能覆蓋包私有成員。
區別在於default
(或package-private
)訪問修飾符。如果不指定訪問修飾符,則只有同一包中的其他類才能訪問它,而不管它們是否是子類。
欲瞭解更多信息:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
這點可以表述爲:你可以只覆蓋到你的類訪問方法,如果這個方法是不是最終。
因此,如果您包裝件,其中基類(或接口)被置於可以覆蓋唯一的非最終公共和保護方法之外創建類。
如果派生類與基類在同一個包中,那麼您也可以在沒有訪問修飾符(包保護)的情況下覆蓋非最終方法。
永遠不能重寫私有方法。