子類繼承父類時各種屬性的問題

普通屬性

子類可以繼承父類的屬性值,後續操作互不影響。

靜態屬性:

public class Main7 extends Father{
 
	//static int test = 11; 
	public static void main(String[] args) {
		test++;
		Father father = new Father();
		System.out.println(test);
	}
}
 
class Father{
	static int test = 1;
	public Father() {
		System.out.println(test);
	}
}

輸出結果: 2 2
除掉註釋的結果:1 12

JAVA 中如果繼承的父類中存在靜態變量,多個子類操作的還是同一個靜態變量地址,因此子類的操作是要相互覆蓋的。
如果子類重寫了父類的方法和靜態變量則專屬子類了,其它子類的操作也就不會相互覆蓋了。此時繼承自父類的靜態變量會隱藏起來,可以通過父類的類名進行訪問。

私有屬性

在一個子類被創建的時候,首先會在內存中創建一個父類對象,然後在父類對象外部放上子類獨有的屬性,兩者合起來形成一個子類的對象。所以所謂的繼承使子類擁有父類所有的屬性和方法其實可以這樣理解,子類對象確實擁有父類對象中所有的屬性和方法,但是父類對象中的私有屬性和方法,子類是無法訪問到的,只是擁有,但不能使用。所以子類對象是絕對大於父類對象的,所謂的子類對象只能繼承父類非私有的屬性及方法的說法是錯誤的。可以繼承,只是無法訪問到而已。子類不能直接訪問父類的私有屬性,子類只能在父類中寫一個public的getXXX的方法來獲取父類中的private屬性,子類就調用父類的getXXX來獲取private屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章