Java中的继承,can';t访问子类函数/方法

Java中的继承,can';t访问子类函数/方法,java,function,inheritance,binary-tree,binary-search-tree,Java,Function,Inheritance,Binary Tree,Binary Search Tree,我无法访问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&l

我无法访问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;
     }
   ...
}
src/main.java:
公共静态void main(字符串[]args)
{
b_节点根=新b_节点(10);
bin_树bt1=新的bin_树(根);
bt1=新的bin_stree();
bt1.insert(root,20);//insert在eclipse中没有显示为建议???
}
src/bin_stree.java:
公共类bin_stree扩展了bin_树
{    
...
公共布尔插入(b_节点localroot,E目标){..}
...
}
src/bin_tree.java:
公共类bin_树
{
公共bin_树(b_节点根)
{
这个。根=根;
}
...
}

不,它不会-因为
bt1
的编译时类型是
bin\u-tree
。Java根据表达式的编译时类型解析方法签名等-仅在执行时根据所涉及对象的实际类型重写它

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

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

这:

bin_tree <Integer> bt1=new bin_tree<Integer> (root);
        bt1=new bin_stree<Integer>();
        bt1.insert(root,20)

还可以向
bin_tree
提供
insert
方法,然后在
bin_stree

的子类中重写所述函数,因为
insert
在实例化的基类中不存在,所以idotguy OP无法获得自动完成功能。因为您已经创建了
bin_stree
bin_-tree
泛型,我想你会希望
bin_-stree
E
bin_-tree
相同,所以使用
公共类bin_-stree扩展bin_-tree
,最后加上
。我把bin_-tree()作为一个抽象类。但不知何故,我仍然无法通过以下方式访问bin_stree()的任何成员:构造函数w/:bin_tree bt1;bt1=新的边界(根)@jerryh91:不-编译时类型的
bt1
仍然是
bin_tree
,而不是
bin_stree
,因此任何只在
bin_stree
中声明的方法都不会可见。(您仍然应该更改类名。)
bin_stree <Integer> bt1=new bin_stree<Integer> (root);
        bt1=new bin_stree<Integer>();
        bt1.insert(root,20)