關於隱藏和覆蓋的區別,要提到rtti(run-time type identification)(執行期型別檢查),也就是執行期的多型,當乙個父類引用指向子類物件的時候,請看下面我編寫的一段**:
複製**
**如下:
public class runtime
class dog extends animal
public void voice()
}class cat extends animal
public void voice()
}class animal
public void voice() }
輸出結果是:00
貓叫動物
您可以看到,當父類animal的引用a指向子類dog時,rtti在執行期會自動確定該引用的真是型別,當子類 覆蓋 了父類的方法時,則直接呼叫子類的方法,列印出「貓叫」;然而非靜態的方法在子類中重寫的話就是被覆蓋,而靜態的方法被子類重寫的話就是隱藏,另外,靜態變數和成員變數也是被隱藏,而rtti是只針對覆蓋,不針對影藏,所以,靜態變數 a 和 非靜態變數 b 以及靜態方法method() 均不通過rtti,是哪個類的引用就呼叫誰的靜態方法,成員變數,而這裡是父類animal的引用,所以直接呼叫父類animal中的方法以及成員變數。所以靜態方法 method(), 靜態變數 a 和成員變數 b 列印結果全是父類中的。只用被覆蓋的非靜態方法voice()才列印子類的。
JAVA隱藏與覆蓋
如 假設有乙個父類father和乙個子類son。父類有乙個成員變數a 0 有乙個靜態成員變數b 0 有乙個成員方法f,輸出0 有乙個靜態成員方法g,輸出0。子類分別重寫這些變數和方法,只是修改變數的值和方法的輸出,全部改為1.我們再宣告乙個靜態型別是父類,動態型別是子類的引用 father fath...
Java 隱藏與覆蓋簡述
隱藏和覆蓋 原則如下 1 如果子類宣告了與父類成員變數同名的成員變數,則父類的成員變數被隱藏。2 如果子類宣告了父類中同名的成員方法,則父類成員方法被覆蓋。重寫父類的方法不允許降低父類方法的訪問許可權。3 父類中的final方法不允許被重寫 覆蓋 4 父類中的static方法只能被子類同名的stat...
Java的方法覆蓋與變數覆蓋
首先,我們看看關於過載,和覆蓋 重寫 的簡明定義 方法過載 如果有兩個方法的方法名相同,但引數不一致,哪麼可以說乙個方法是另乙個方法的過載。方法覆蓋 如果在子類中定義乙個方法,其名稱 返回型別及引數簽名正好與父類中某個方法的名稱 返回型別及引數簽名相匹配,那麼可以說,子類的方法覆蓋了父類的方法 我們...