我有一个名为Dictionary的接口,它有一个方法insert()
.这个接口是由类实现的BSTree
,但我也有一个类AVLTree
是子类BSTree
.AVLTree
重新定义insert()
它以满足它的需要.现在,如果我输入以下代码:
Dictionary data=new AVLTree(); data.insert();
有一个问题,因为insert()
被调用的方法BSTree
不是AVLTree
.为什么多态性不在这里?什么是适当的解决方案,保留多态性的原则?
当你说AVLTree"重新定义"插入时,你究竟是什么意思?它必须覆盖该方法,这意味着具有完全相同的签名(模数方差).
你能在BSTree和AVLTree中发布insert()的签名吗?
如果在AVLTree中应用@Override注释(假设适当的最新JDK),如果没有正确的签名,则应该收到警告/错误.