Java Stack接口实现测试问题:getIntegerStack()返回类型不兼容报错排查及解决方案咨询
解决
getIntegerStack()重写时的返回类型不兼容问题 问题根源
你遇到的错误完全是因为导入冲突:你的LinkedListTest类里导入了java.util.Stack(Java标准库的栈类),但父类StackTest中的getIntegerStack()方法返回的是你自己定义的Stack<T>接口,这两个Stack是完全不同的类型,所以编译器认为你试图用不兼容的返回类型重写方法。
另外,你不想在StackTest里导入java.util.Stack是非常正确的——否则会出现命名冲突,导致你自己的Stack接口被遮蔽,你的top()方法自然无法正常工作。
具体修复步骤
移除错误的导入
打开LinkedListTest,删掉这一行:import java.util.Stack;这样编译器就会正确识别父类方法中的
Stack<Integer>指的是你自定义的那个接口,而不是Java标准库的类。正确实现
getIntegerStack()方法
因为你的LinkedList<T>已经实现了自定义的Stack<T>接口,所以只需要返回一个LinkedList<Integer>的实例即可:@Override protected Stack<Integer> getIntegerStack() { return new LinkedList<>(); }验证修复效果
现在你的LinkedListTest会正确继承StackTest中的所有测试方法,并且通过getIntegerStack()提供你的LinkedList实现来运行测试。你自己在LinkedListTest中定义的list变量和额外的测试逻辑可以保留,不会影响Stack接口的测试流程。
额外注意事项
- 确保你的
LinkedList类确实正确实现了Stack接口的所有方法(从代码看你已经完成了这一步,包括push()、pop()、top()等)。 - 父类
StackTest中的setUp()方法会自动调用你实现的getIntegerStack()来初始化测试用的栈实例,不需要你额外修改这部分逻辑。
这样修改后,编译器的返回类型冲突错误就会消失,你可以正常运行所有针对Stack接口的测试了。
内容的提问来源于stack exchange,提问作者user17024023
相关产品推荐
相关产品推荐

