子类中的获取器和设置器

6

我正在学习编程中的继承,我想知道在每个子类中是否应该编写覆盖实例变量的getter和setter,还是只使用来自抽象父类的继承的getter和setter。

在每个子类中编写继承变量的getter和setter是否会导致糟糕的代码?


子类中的getter和setter会有什么不同?(如果它们没有不同,那么你将重写代码,这将违反DRY原则) - GBlodgett
通常情况下,您不需要覆盖超类的getter / setter方法,但如果有业务需求,则可以进行覆盖。 - Pushpesh Kumar Rajwanshi
2个回答

4

如果你不需要子类中的特殊行为,那么它会起作用。

假设:

class A {
   private String val;
   public String getVal() { return this.val }
   public void setVal(String newValue) { this.val = newValue }
}
class B extends A {
   // you already have access to getVal & setVal here, so it's useless to override them here
}
class C extends A {
   private String valCopy;

   @Override
   public void setVal(String newValue) {
      super(newValue);
      this.valCopy = newValue
      // new behavior so here it's ok to override
   }
}

你的概念很清晰,但是你的C类的setVal方法似乎有问题。另外,setVal的返回类型与A类不同。你可能需要稍微编辑一下你的代码。 - Pushpesh Kumar Rajwanshi

0
假设我们有一个通用类Number,它接受任何数值,但我们想使用Number类实现两个不同的类,例如PositiveNumber和NegativeNumber,我们可以重写setter方法并强制执行设置的数字始终为正数或负数,具体取决于重写的类。
public class Number {
    private int num;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}

public class PositiveNumber extends Number {

    @Override
    public void setNum(int num) {
        super.setNum(num > 0 ? num : -num);
    }

}

public class NegativeNumber extends Number {

    @Override
    public void setNum(int num) {
        super.setNum(num > 0 ? -num : num);
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接