繁体   English   中英

在Java中继承,无法访问子类函数/方法

[英]Inheritance in Java, can't access subclass functions/methods

我在访问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;
     }
   ...
}

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

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

(你也一定要改变类名遵循Java的命名约定。 BinaryTree将用于超是更可读的名称,例如。)

这个:

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的子类中覆盖所述函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM