You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需实例化子类即可调用抽象类中所有子类共有的方法

重构方案

你可以根据自己的项目Java版本、代码规范选择以下任意一种方案,都可以实现不实例化策略子类直接调用getSomething公共方法:

方案1:抽公共静态工具类(全版本兼容)

把AbstractStrategy中getSomething的公共逻辑抽为独立静态工具方法,所有需要调用的地方直接引用即可,不需要实例化任何对象:

// 新增公共工具类
public class StrategyCommonUtils {
    // 静态方法,直接类名调用
    public static Object getSomething() {
        // 原有公共逻辑
    }
}

// 原有抽象类保持兼容,直接调用工具类
abstract class AbstractStrategy implements Strategy {
  @Override
  public Object getSomething() {
    return StrategyCommonUtils.getSomething();
  }
}

// ContractImpl直接调用工具类即可
class ContractImpl implements Contract {
  // 其他方法保持不变
  @Override
  public Object getSomething() {
     return StrategyCommonUtils.getSomething();
  }
}

方案2:使用Java 8+接口默认/静态方法

如果项目用Java 8及以上版本,可以直接把公共逻辑放到Strategy接口的默认方法或者静态方法中,甚至可以直接删掉多余的抽象类:

interface Strategy {
  void createSomething();
  void updateSomething();
  // 静态方法,无需实例化直接调用
  static Object getSomethingCommon() {
    // 公共逻辑
  }
  // 也可以写默认方法,子类不需要重复实现
  default Object getSomething() {
    return getSomethingCommon();
  }
}

// 子类只需要实现两个非公共方法,不需要重写getSomething
class StrategyA implements Strategy {
  @Override
  public void createSomething() {...}
  @Override
  public void updateSomething() {...}
}

// ContractImpl直接调用接口静态方法
class ContractImpl implements Contract {
  @Override
  public Object getSomething() {
     return Strategy.getSomethingCommon();
  }
}

方案3:拆分接口优化结构(可选搭配前两种方案)

你现在的Contract和Strategy两个接口方法完全重复,可以按职责拆分接口,逻辑更清晰,也避免重复定义:

// 公共读接口,放公共逻辑
interface ReadableService {
    Object getSomething();
}
// 写接口,放差异化方法
interface WritableService {
    void createSomething();
    void updateSomething();
}

// Strategy和Contract都继承拆分后的接口,不需要重复写方法定义
interface Strategy extends ReadableService, WritableService {}
interface Contract extends ReadableService, WritableService {}

内容的提问来源于stack exchange,提问作者Mister Mow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:54:04