子级中的 getter 和 setter 类
Getters and setters in child classes
我只是在学习编程中的继承,我想知道您是否应该为每个子项中的实例变量编写覆盖的 getter 和 setter class,或者您是否只使用从抽象父项继承的 class =15=].
在每个子class中为继承变量编写getters和setters会不会是糟糕的代码?
是的,如果您不需要 child class 中的特殊行为。
假设:
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
}
}
假设我们有一个通用的 class Number,它接受任何数值,但我们想要实现两个不同的 classes,例如,使用 Number class 的 PositiveNumber 和 NegativeNumber,我们可以覆盖 setter 方法并强制数字集始终为正或负,具体取决于覆盖的 class.
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);
}
}
我只是在学习编程中的继承,我想知道您是否应该为每个子项中的实例变量编写覆盖的 getter 和 setter class,或者您是否只使用从抽象父项继承的 class =15=].
在每个子class中为继承变量编写getters和setters会不会是糟糕的代码?
是的,如果您不需要 child class 中的特殊行为。
假设:
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
}
}
假设我们有一个通用的 class Number,它接受任何数值,但我们想要实现两个不同的 classes,例如,使用 Number class 的 PositiveNumber 和 NegativeNumber,我们可以覆盖 setter 方法并强制数字集始终为正或负,具体取决于覆盖的 class.
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);
}
}