在类中,我将继承这些方法受保护的覆盖,以便改变它使用的方法的行为。以下是练习,对吗?如果没有,为什么?
简单类型和不可变对象:
class A{
(...)
public int aA(){
int b=1;
return this.bB(b); // It is about this place.
}
protected int bB(int b){
b=2*b;
return b;
}
(...)
}
class B extends A{
(...)
@Override
protected int bB(int b){
return b-1;
}
}
在A类中,我想在方法aA()中使用方法bB(),在这个类中实现了两个方法。方法bB()我把"返回"方法aA()。然后B定义一个继承自A的类,并重写方法bB()。因此,B类中的方法aA()与A类中的方法aA()的工作方式不同。
如果返回方法,返回具有修改能力的对象怎么办? 就像使用静态方法作为回报一样? 这是否对并发编程有任何影响?
答案 0 :(得分:1)
您似乎在询问上述代码是否是编写覆盖其超类中方法的方法的正确方法。
是的,这是正确的方法。
是的,这是改变行为的好方法" ...虽然您只是更改了新类的行为(B
)
如果返回的对象能够修改怎么办?
答案相同。
与静态和非静态方法的返回一样?
没有。静态方法是非多态的。您无法覆盖静态方法。
在您的示例中,如果bB
是静态的,那么@Overrides
注释会给您一个编译错误。如果您将其删除,您会发现bB()
中aA
的来电始终会呼叫A.bB
而永远不会B.bB
。
请注意,使用语法this.someStaticMethod(...)
调用静态方法是合法的,但样式不好。看起来这个电话会是多态的,但实际上它并不是。
这是否对并发编程有任何影响?
没有特别的含义。
另一方面,如果您实际上询问返回其他方法的方法......您的示例代码不会这样做。