Java - 在另一个实例中添加抽象类的实例

时间:2010-11-11 14:49:36

标签: java abstract

我有这段代码:

public class Profile extends Container{
    public Profile(String value) {
        Container profilo_1 =new Container();
        Container profilo_2 =new Container();

        // (1) THIS ADD A BUTTON TO THE MAIN CLASS
        this.createButton().setLabel("Modifica Profilo");

        // (2) NOW I NEED TO ADD A BUTTON INTO THE INSTANCE OF profilo_2 BUT IT FAILS
        profilo_2.add(this.createButton());

        this.add(profilo_1);
        this.add(profilo_2);        
    }
}

第(2)点失败,因为它说即将添加一个孩子到这个容器,但它已经是一个容器的所有者...

事实上,如果我这样做:

ILabel label=new ILabel();
profilo_2.add(label);

它告诉我,ILabel()是abract,无法实例化!

我该如何解决?为每个人欢呼:)

4 个答案:

答案 0 :(得分:1)

尝试更改为

Button button2 = this.createButton();
button2.setLabel("EDIT");
profilo_2.add(button2);

顺便说一句,这与抽象类无关,从我看到的

编辑:虽然你说#1“向主类添加一个按钮”,这是否意味着createButton()执行this.add(按钮)?如果是这样,那么您应该更改该功能,以便每次创建按钮时都不会这样做。

答案 1 :(得分:1)

问题可能是当你创建一个带有“this.createButton”的按钮时,该按钮的父设置为“this”(在此上下文中),当你尝试将它添加到profilo_2时,它会抛出一个错误。相反,你应该直接在profilo_2上创建按钮,然后父母将是正确的(也许你不必添加()它?)

答案 2 :(得分:1)

疯狂地猜测,因为这取决于你的代码...试试这个(没有Piotr所说的)

profilo_2.add(profilo_2.createButton());

答案 3 :(得分:0)

可能setLabel()会返回无法传递给Container::add(..)的内容。请提供Container

的代码