Java中父类能否实现调用子类变量的方法 省略子类重复getter/setter
Java公共getter/setter复用方案
结论
完全可以实现,这是面向对象继承特性的典型适用场景,通过抽离公共父类即可避免所有子类重复编写相同的getter/setter逻辑。
具体实现步骤
- 第一步:定义公共父类,将所有子类通用的成员变量、对应的getter/setter方法都统一放在父类中,成员变量推荐用
protected修饰,既允许子类直接访问,也能控制外部的访问权限。
父类示例代码:
public class BaseClass { // 所有子类共有的成员变量 protected int row; protected boolean condition; // 通用getter方法 public int getRow() { return row; } public boolean getCondition() { return condition; } // 通用setter方法 public void setRow(int row) { this.row = row; } public void setCondition(boolean condition) { this.condition = condition; } }
- 第二步:所有子类直接继承该公共父类,无需再重复定义通用变量和对应的getter/setter,仅需实现子类独有的属性和方法即可。
子类示例代码:
public class CustomSubClass extends BaseClass { // 仅定义子类独有的成员变量 private String subUniqueField; // 仅实现子类独有属性的getter/setter public String getSubUniqueField() { return subUniqueField; } public void setSubUniqueField(String subUniqueField) { this.subUniqueField = subUniqueField; } }
适配原有接口的方案
如果你之前已经通过接口定义了这些方法的签名,仅需要让公共父类实现该接口即可,子类继承父类后会自动满足接口实现要求,无需再单独实现接口方法:
// 原有定义的接口 public interface CommonInterface { int getRow(); boolean getCondition(); } // 父类实现接口 public class BaseClass implements CommonInterface { // 内部的变量、getter/setter实现和上文一致 }
注意事项
- 仅把所有子类都具备的公共属性和方法抽离到父类中,不要在父类中引用子类独有的属性
- 如果个别子类需要自定义某个getter/setter的逻辑,直接在子类中重写对应方法即可,符合多态特性
内容的提问来源于stack exchange,提问作者QuantumBlink
相关产品推荐
相关产品推荐

