方法

时间:2017-04-30 23:31:10

标签: java class interface casting abstract-class

好的,所以我将以一个例子开始:

假设我们有一个带有接口变量的抽象类,它在构造函数中初始化。抽象类本身具有该变量的getter,它的子类在构造函数中具有接口的实现。

现在,我遇到的问题是,当试图调用任何子类的getter(它只在超类中声明,但它应该使用在它们的构造函数中声明的变量)时,它没有&#39 ; t返回实现,返回接口本身。

public abstract class AbstractClass {
    private final ExampleInterface exampleInterface;

    public AbstractClass(ExampleInterface exampleInterface) {
        this.exampleInterface = exampleInterface;
    }

    public ExampleInterface getExampleInterface() {
        return this.exampleInterface;
    }
}

public class AbstractClassSubclass extends AbstractClass {

    //Instead of the interface itself, I provide my constructor it's implementation
    public AbstractClassSubclass(ExampleInterfaceImplementation exampleInterfaceImpl) {
        super(exampleInterfaceImpl);
    }
}

public class TestClass {
    private void testMethod() {
        AbstractClassSubclass test = new AbstractClassSubclass(
                new ExampleInterfaceImplementation()
        );

        //Would return ExampleInterface, instead of ExampleInterfaceImplementation
        test.getExampleInterface();
    }
}

更新

我相信我已经使用类型参数修复了这个问题。 我确定我之前尝试过但有一些问题...

现在它完美无缺。

0 个答案:

没有答案