【问题标题】:How to Subclassing with Concrete Parameters如何使用具体参数进行子类化
【发布时间】:2017-11-23 18:13:04
【问题描述】:

我有一个类 Transaction 和一个 Service 接口

public class Transaction {}

public interface RequestService {
    public String getRequest(Transaction transaction);
}

现在我想继承 Transaction 类并为服务接口创建一个具体类

public class ESPTransaction extends Transaction {}

public class ESPRequestService implements RequestService {
    @Override
    public String getRequest(ESPTransaction espTransaction) {
        StringBuffer buff = new StringBuffer(espTransaction.someMethodThatDoesntExistInParentClass());
        return buff.toString();
    }
}

IDE 抱怨说,即使 ESPTransaction 是 Transaction 的子类,我也没有覆盖超类型方法。

我该如何实现?

【问题讨论】:

    标签: java inheritance compiler-errors subclassing concreteclass


    【解决方案1】:

    正如 IDE 所指出的,ESPRequestService 没有正确实现 RequestService,因为它没有 getRequest(Transaction) 方法。

    一个巧妙的解决方案是使接口通用,因此每个RequestService 实现都可以指定它期望的Transaction 的类型:

    public interface RequestService<T extends Transaction> {
        public String getRequest(T transaction);
    }
    
    public class ESPRequestService implements RequestService<ESPTransaction> {
        @Override
        public String getRequest(ESPTransaction espTransaction) {
            StringBuffer buff = new StringBuffer(espTransaction.someMethodThatDoesntExistInParentClass());
            return buff.toString();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      相关资源
      最近更新 更多