0

我无法访问 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;
     }
   ...
}
4

2 回答 2

2

不,它不会 - 因为编译时类型bt1bin_tree<Integer>. Java 根据表达式的编译时类型解析方法签名等 - 仅根据所涉及对象的实际类型在执行时覆盖它执行。

您可能应该bin_tree使用抽象方法创建一个抽象类,insert然后在具体子类中实现该方法。或者它可能是一个开始的接口,除非你真的计划实现一些方法。

(您还应该明确地更改类名以遵循 Java 命名约定。BinaryTree例如,对于超类来说,这将是一个更具可读性的名称。)

于 2013-05-23T18:14:23.647 回答
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

于 2013-05-23T18:15:15.193 回答