我无法访问bin_stree对象中的任何公共函数:
src/main.java:
public static void main(String[] args)
{
b_node <Integer> root=new b_node <Integer> (10);
bin_tree <Integer> bt1=new bin_tree<Integer> (root);
bt1=new bin_stree<Integer>();
bt1.insert(root,20);//insert doesnt show up as a suggestion in eclipse???
}
src/bin_stree.java:
public class bin_stree <E extends Comparable <E>> extends bin_tree
{
...
public boolean insert(b_node<E> localroot, E target){..}
...
}
src/bin_tree.java:
public class bin_tree <E>
{
public bin_tree(b_node<E> root)
{
this.root=root;
}
...
}
答案 0 :(得分:2)
不,它不会 - 因为bt1
的编译时类型是bin_tree<Integer>
。 Java根据表达式的编译时类型解析方法签名等 - 仅在执行时根据所涉及对象的实际类型覆盖它。
您应该使用bin_tree
抽象类,使用抽象的insert
方法,然后在具体的子类中实现。或者它可以是一个开始的界面,除非你真的计划实现一些方法。
(你也应该肯定更改类名以遵循Java命名约定。例如,BinaryTree
对于超类来说是一个更易读的名称。)
答案 1 :(得分:0)
这:
bin_tree <Integer> bt1=new bin_tree<Integer> (root);
bt1=new bin_stree<Integer>();
bt1.insert(root,20)
失败,因为bt1
仍然是bin_tree
。
你想要这个:
bin_stree <Integer> bt1=new bin_stree<Integer> (root);
bt1=new bin_stree<Integer>();
bt1.insert(root,20)
也可以将insert
方法提供给bin_tree
,然后覆盖bin_stree