我想知道如果您為某個引數創建一個帶有空 setter 方法的父類,然后創建一些擴展該類的類,但并非所有類都具有該引數,會發生什么情況。在存在引數的類中呼叫 set 方法時,它會設定引數。而在引數不存在的類中,什么也不會發生,例如:
class Parent{
void setParam(String param){};
}
class A extends Parent{
String param;
public void setParam(String param){
this.param = param;
}
}
class B extends Parent{
String otherParam;
public void setOtherParam(String param){
this.otherParam = param;
}
}
因此,如果我們創建類 A,將其轉換為 Parent,然后 try setParam(),該屬性param將被設定。
Parent parent = new A();
parent.setParam("PARAM");
A{param='PARAM'}
如果我們對 B 類做同樣的事情并嘗試setParam()什么都不會發生。
有人可以解釋“幕后”發生的事情嗎?我希望得到一個例外,因為我試圖設定一個不存在的引數。
uj5u.com熱心網友回復:
classA已經覆寫了setParamclass的方法Parent。即使您將A實體分配為Parent類,呼叫a.setParam()仍然表現為子類A。這就是所謂的“子類多型性”。
類B不會覆寫任何Parent. 所以b.setParam()只是呼叫 b 的父setParam方法,什么也沒有發生。
uj5u.com熱心網友回復:
在Parent類中,setParam()是一個空方法,從任何子類呼叫它都不會執行任何代碼行,除非子類覆寫它并向其添加幾行代碼。
類A覆寫setParam()并向其添加一行代碼。B另一方面,類不會覆寫此方法。因此,當setParam()在 的實體上呼叫時A,將執行重寫的方法A并將提供的值分配給成員變數param;但是,當在 的實體上呼叫時B,會執行 的方法Parent并且沒有任何反應,因為它在 中是空的Parent。
因此,在這種情況下,“幕后”沒有任何事情發生。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/464272.html
