父类中的 Setter,具有一些没有参数的子类



我想知道,如果为某个参数创建一个具有空setter方法的父类,然后创建几个扩展所述类的类,但不是所有类都具有该参数,会发生什么。在存在参数的类中调用set方法时,它会设置param。在参数不存在的类中,什么都不会发生,例如:

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,并尝试setParam(),则会设置属性param

Parent parent = new A();
parent.setParam("PARAM");
A{param='PARAM'}

如果我们对类B也这样做,并尝试CCD_ 3,则不会发生任何事情。

有人能解释一下"幕后"发生了什么吗?我希望得到一个异常,因为我正在尝试设置一个不存在的参数。

A已重写类Parent的方法setParam。即使将A实例分配为Parent类,对a.setParam()的调用仍然表现为子类A。这就是所谓的";子类多态性";。

B不覆盖Parent的任何内容。所以b.setParam()只是调用b的父级的setParam方法,什么也没发生。

Parent类中,setParam()是一个空方法,从任何子类调用它都不会执行任何代码行,除非子类重写它并向它添加几行代码。

A重写setParam()并添加一行代码。类B不重写此方法。因此,当在A的实例上调用setParam()时,执行A的重写方法,并将提供的值分配给成员变量param;然而,当在B的实例上调用时,会执行Parent的方法,并且不会发生任何事情,因为它在Parent中是空的。

因此,在这种情况下,没有任何事情发生。

最新更新