Setter 在父 class 中,一些子 class 没有参数
Setter in parent class, with some child classes that don't have the parameter
我想知道如果您为某个参数创建一个带有空 setter 方法的父 class,然后创建一些 class 扩展上述 class,但不是所有的都有这个参数。
在参数存在的 class 中调用 set 方法时,它会设置参数。
而在参数不存在的classes中,没有任何反应,例如:
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;
}
}
所以如果我们创建 class A,将其向上转换为 Parent,然后尝试 setParam()
,将设置 属性 param
。
Parent parent = new A();
parent.setParam("PARAM");
A{param='PARAM'}
如果我们对 class B 做同样的事情并尝试 setParam()
什么都不会发生。
谁能解释一下发生了什么事 'under the hood'?我希望得到一个异常,因为我试图设置一个不存在的参数。
class A
覆盖了 class Parent
的方法 setParam
。即使您将 A
实例分配为 Parent
class,对 a.setParam()
的调用仍然表现为 subclass A
。这就是所谓的“subclass多态性”。
class B
不会覆盖任何 Parent
。所以 b.setParam()
只是调用了 b 父级的 setParam
方法,没有任何反应。
在 Parent
class 中,setParam()
是一个空方法,从任何子 class 调用它不会执行任何代码行,除非子 class 覆盖它并向其添加几行代码。
Class A
覆盖 setParam()
并向其添加一行代码。另一方面,Class B
不会覆盖此方法。
因此,当在 A
的实例上调用 setParam()
时,将执行 A
的重写方法并将提供的值分配给成员变量 param
;然而,当在 B
的实例上调用时, Parent
的方法被执行但没有任何反应,因为它在 Parent
.
中是空的
因此,在这种情况下 'under the hood' 什么也没有发生。
我想知道如果您为某个参数创建一个带有空 setter 方法的父 class,然后创建一些 class 扩展上述 class,但不是所有的都有这个参数。 在参数存在的 class 中调用 set 方法时,它会设置参数。 而在参数不存在的classes中,没有任何反应,例如:
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;
}
}
所以如果我们创建 class A,将其向上转换为 Parent,然后尝试 setParam()
,将设置 属性 param
。
Parent parent = new A();
parent.setParam("PARAM");
A{param='PARAM'}
如果我们对 class B 做同样的事情并尝试 setParam()
什么都不会发生。
谁能解释一下发生了什么事 'under the hood'?我希望得到一个异常,因为我试图设置一个不存在的参数。
class A
覆盖了 class Parent
的方法 setParam
。即使您将 A
实例分配为 Parent
class,对 a.setParam()
的调用仍然表现为 subclass A
。这就是所谓的“subclass多态性”。
class B
不会覆盖任何 Parent
。所以 b.setParam()
只是调用了 b 父级的 setParam
方法,没有任何反应。
在 Parent
class 中,setParam()
是一个空方法,从任何子 class 调用它不会执行任何代码行,除非子 class 覆盖它并向其添加几行代码。
Class A
覆盖 setParam()
并向其添加一行代码。另一方面,Class B
不会覆盖此方法。
因此,当在 A
的实例上调用 setParam()
时,将执行 A
的重写方法并将提供的值分配给成员变量 param
;然而,当在 B
的实例上调用时, Parent
的方法被执行但没有任何反应,因为它在 Parent
.
因此,在这种情况下 'under the hood' 什么也没有发生。