我有一个接口,一个实现它的超类,以及一个扩展超类的子类。然后我有测试创建子类类型的对象,但将其存储在接口类型的变量中。当我使用在接口中定义的方法,在超类中实现并在子类中重写时,它从超类调用该方法。为什么是这样?我无法更改测试类,但是我是否对子类做错了什么?
public interface SampleInterface<T extends Comparable<T>>{
void add(T element);
//other methods, etc
}
public class SampleClassA<T extends Comparable<T>> implements SampleInterface<T> {
public void add(){
System.out.println("super");
}
}
@Override
public class SampleClassB<T extends Comparable<T>> extends SampleClassA<T> {
public void add(){
System.out.println("sub");
}
}
然后我想在看起来像这样的测试中使用代码:
private SampleInterface<Integer> test = new SampleClassB<Integer>();
test.add();
它打印“超级”,但我想要“sub”。这也是我的代码的简化版本。