如何使用具体参数进行子类化

时间:2017-11-23 18:13:04

标签: java inheritance compiler-errors subclassing concreteclass

我有一个类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子类化,我也没有覆盖超类型方法。

我该如何实现?

1 个答案:

答案 0 :(得分:2)

正如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();
    }
}