Java 在子类中实现setter/getter的最佳实践?
如果我有一个必须保留某些功能的超类,因此需要setter/getter(我意识到这并不理想,但这无关紧要),那么当我实现一个子类时,我是否应该在子类中包含对超类setter/getter的调用,即使我可以在技术上调用它们而无需再次编写代码 我在下面贴了一个例子来说明我的意思Java 在子类中实现setter/getter的最佳实践?,java,inheritance,methods,getter-setter,Java,Inheritance,Methods,Getter Setter,如果我有一个必须保留某些功能的超类,因此需要setter/getter(我意识到这并不理想,但这无关紧要),那么当我实现一个子类时,我是否应该在子类中包含对超类setter/getter的调用,即使我可以在技术上调用它们而无需再次编写代码 我在下面贴了一个例子来说明我的意思 class Parent { private int x; public void myMethod() { // Code here. } public void setX(int
class Parent {
private int x;
public void myMethod() {
// Code here.
}
public void setX(int y) {
x = y;
}
public int getX() {
return x;
}
}
class Child extends Parent {
@Override
public void myMethod() {
super.myMethod();
// Different code here.
}
// Are the inclusions below really necessary?
public void setX(int y) {
super.setX(y);
}
public int getX() {
super.getX();
}
}
继承的全部要点是,如果超类方法满足您的需要,则不必在子类中重新实现方法。只有当子类方法需要做一些不同/更多的事情时,才应该重写 我应该在子类中包含对超类的setters/getter的调用吗 首先,如果您希望孩子能够访问
private int x
,请将private更改为protected
我能想到何时返回/设置不同数据的唯一原因是,例如,在设置
x
之前,子类在y
上执行一些额外的计算。否则,如果您只是委托给super方法,那么该定义是不必要的 如果需要专门从父对象访问私有字段,请使用超类访问器。如果在子类中定义了不同的实例字段,则需要单独的getter来访问这些字段/变量
否则,只需使用预定义的超级方法,这些超级方法由扩展父类的所有类继承。在默认情况下,覆盖方法只调用它们的超级版本,而不覆盖它们 换言之:
@Override
void foo() { super.foo(); }
结果绝对与行为一致。。。根本不重写该方法
这样,相反,你应该考虑让这些吸收器和设置器<强>最终< /强>以防止子类重写它们!作为记录:当重写方法时,您总是希望在这些方法上添加@Override注释(这样编译器可以告诉您何时您只认为您正在重写一个方法)。
感谢您的接受;我没想到会这样。我用更多的信息更新了我的答案;旁注:考虑到你对“继承”的理解是不正确的;也许退一步对您来说是有意义的——也许您认为基类上的“我需要getter/setter”方法也可能是错误的。拥有能手并不是件好事,但允许二传手是一件应该避免的事情!我正在完成一个练习,其中说明我应该同时使用getter和setter方法。不幸的是,我读过的一些教学材料更关注教学功能,而不是最佳实践,这让我感到困惑。然而,你的回答是澄清的。