java 字段覆蓋 field 問題

2021-08-30 15:30:14 字數 1118 閱讀 9983

欄位的覆蓋

public class father 

}class son extends father

此時兩個輸出分別為:

sonfather

所以說,字段覆蓋並不會導致父類的的那個欄位沒作用了,當子類例項向上轉型為父類例項時,通過父類例項使用字段,呼叫的則是父類中的字段。

不僅僅是向上轉型會這樣,看下面這段**:

public class father 

public static void main(string args)

}class son extends father

根據我的理解,可以這樣解釋:

son繼承了father類,所以繼承了print方法,但是,通過son的例項呼叫print方法其實相當於

son.super.print();  其中super就是表示father類的乙個例項,該例項其實就是son中的乙個字段,即father  super,只不過是隱藏的而已。

當son的例項要呼叫print方法時,就是用super物件再呼叫print方法。

也就說,其實print方法不直接屬於son類,只不過當son沒有重寫print方法時,都會去呼叫father例項super的print方法。

所以,super物件呼叫print方法所能訪問到的name欄位自然也只能是super物件中的name欄位。。

再通俗點說,super本身就是是son中的乙個字段,那麼super又怎能直接訪問son中的其他欄位呢?(除非把son中其他字段傳遞進super中)。。

所以,super無法訪問到son中的name欄位。不過,son中是可以訪問到super中的name欄位的。。不過當son中和super中同時存在乙個同名的字段時,通過son的例項自然是優先訪問son的字段。。。如果把son例項向上轉型為father例項,此時轉型後的例項訪問同名字段會變成優先訪問super中的字段。

以上是我對字段覆蓋的簡單猜測。。。就是我自己強行解釋字段覆蓋為什麼那樣。。

方法覆蓋和字段覆蓋是不一樣的,不論怎樣(父類方法呼叫被覆蓋方法?向上轉型?)所訪問到的都是被覆蓋後的方法。

java 反射機制(Field)對類的字段進行操作

設定變數setfield field userinfo.getclass getdeclaredfield name 私有變數set需呼叫此方法 field.setaccessible true 字元型別名稱 string fieldtypename field.gettype get name 暫...

ES如何指定返回的字段field

在elasticsearch 2.x版本中,如果我們想指定查詢返回的字段,可以使用fields欄位設定,如下 string index string type 指定要返回的字段 string fields new string 2 fields 0 field1 欄位1名稱 fields 1 fil...

ES如何指定返回的字段field

在elasticsearch 2.x版本中,如果我們想指定查詢返回的字段,可以使用fields欄位設定,如下 string index string type 指定要返回的字段 string fields new string 2 fields 0 field1 欄位1名稱 fields 1 fil...