如何在超类构造函数中插入子类构造函数的代码?

时间:2015-01-27 03:12:26

标签: java swing inheritance jpanel

所以我有这个超类使用一些组件制作一个JPanel。现在我需要子类来制作一些radiobuttons并在buttonMin之前显示它们。现在是我的问题:如何在我需要它的超类中调用我的子类中的代码(请参阅代码以查看应该调用代码的位置)?

我的超类

public class RecordLine extends JPanel{

    public RecordLine(Product product){
        JTextField fieldName = new JTextField();
        fieldName.setText(product.getName());
        this.add(fieldName);

        Component horizontalStrut = Box.createHorizontalStrut(20);
        this.add(horizontalStrut);

        //Subclass code should be executed here

        Component horizontalStrut_1 = Box.createHorizontalStrut(20);
        this.add(horizontalStrut_1);

        JButton buttonMin = new JButton("-");
        this.add(buttonMin);
    }
}

我的子类

public class RecordLineDrinks extends RecordLine {

    public RecordLineDrinks(Product product) {
        super(product);

        JRadioButton rdbtnFles = new JRadioButton("Fles");
        this.add(rdbtnFles);
    }

}

3 个答案:

答案 0 :(得分:0)

你不能直接...你可以让你的超类抽象,然后实现一个你在构造函数中间调用的方法

public abstract class RecordLine extends JPanel{
    abstract void midwayUpdate();

然后

public class RecordLineDrinks extends RecordLine {

    public RecordLineDrinks(Product product) {
        super(product);

    }
    void midwayUpdate() {
        JRadioButton rdbtnFles = new JRadioButton("Fles");
        this.add(rdbtnFles);

    }

}

答案 1 :(得分:0)

你有一个“模板方法”。

在超类中定义(但不一定在那里做任何事情)并从超类'方法调用。

在子类中,您可以覆盖该方法来执行操作。

 //Subclass code should be executed here
 this.addExtraButtons();

如果在构造函数中执行此操作,则必须要小心,因为它将在实例完全初始化之前调用。将所有这些代码移动到其他setup()方法中可能更干净。

答案 2 :(得分:0)

您可能需要更改类结构,提供一种可用于创建UI的方法(即createView),从中可以通过getter访问其他组件

这样,您可以更改createView的工作方式。

问题在于,您将负责完全重新创建子类中的UI,因此您将需要其他UI组件的getter方法。

另一个选择是,如果您知道要添加新组件的位置,则可以提供无效的方法的默认实现,但允许子类修改

public class RecordLine extends JPanel{

    public RecordLine(Product product){
        JTextField fieldName = new JTextField();
        fieldName.setText(product.getName());
        this.add(fieldName);

        Component horizontalStrut = Box.createHorizontalStrut(20);
        this.add(horizontalStrut);

        //Subclass code should be executed here

        Component horizontalStrut_1 = Box.createHorizontalStrut(20);
        this.add(horizontalStrut_1);

        addBeforeMinButton();

        JButton buttonMin = new JButton("-");
        this.add(buttonMin);
    }

    protected void addBeforeMinButton() {
    }
}

但这通常意味着您事先知道如何修改UI