如果我有一个必须保留一些功能的超类,因此需要setter / getters(我意识到这不是理想的,但这不是重点),当我实现一个子类时,我应该包括打电话给超级班级'尽管我可以在技术上调用它们而无需再次编写代码,但是子类中的setter / getters?
我在下面发布了一个我的意思的例子。
Users
答案 0 :(得分:3)
继承的全部要点是,如果超类方法满足您的需要,则不必在子类中重新实现方法。仅当子类方法需要执行不同/更多的操作时,才应覆盖。
答案 1 :(得分:1)
我应该在子类
中包含对超类'setter / getters的调用
首先,如果您希望孩子有权访问private int x
,请将私人更改为受保护。
我能想到何时返回/设置不同数据的唯一原因是,例如,子类在设置y
之前在x
上执行了一些额外的计算。否则,如果您只是委托super方法,那么该定义是不必要的。
答案 2 :(得分:1)
覆盖只调用超级版本的方法是默认情况下不会覆盖的方法!
换句话说:
@Override
void foo() { super.foo(); }
结果绝对与行为相同......根本不会覆盖该方法。
所以,恰恰相反:你应该考虑让那些getter和setter final 来阻止子类覆盖它们!并且为了记录:当重写方法时,总是想要在这些方法上放置@Override注释(因此编译器可以告诉您何时只是认为你正在覆盖一个方法法)。
答案 3 :(得分:0)
如果需要专门从父对象访问私有字段,请使用超类访问器。如果在子类中定义了不同的实例字段,则需要单独的getter来访问这些字段/变量。
否则,只需使用预定义的超级方法,这些方法由扩展父类的所有类继承。