【问题标题】:Extending a java class whilst also altering it扩展一个 java 类同时也改变它
【发布时间】:2015-07-12 08:30:36
【问题描述】:

一段时间以来,我一直是 stackoverflow 的潜伏者。我正在自学 Java,如果这是一个相当基本的问题,请耐心等待(虽然我在这里找不到答案)。

如果我有一个 java 类(如下面的),我希望在以后的类中以稍微不同的方式使用它(例如更改按钮文本/或输出),有没有办法通过扩展原班?

在下面的例子中,我有一个带有两个按钮的 JFrame,它们将不同的文本打印到控制台。我只是想在更改其中一个按钮名称的同时扩展此类。

原始类:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class FrameIt extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        new FrameIt().setVisible(true);
    }

    public FrameIt() {
        super("Make a choice");
        setSize(600, 600);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new GridLayout());

        JButton button = new JButton("Click Me.");
        JButton button2 = new JButton("No, you should Click Me!");
        button.addActionListener(this);
        button2.addActionListener(this);

        add(button);
        add(button2);
    }

    @Override

    public void actionPerformed(ActionEvent e) {
        String name = e.getActionCommand();
        if(name.equals("Click Me")){
            System.out.println("That was actually the right choice.");
        }else{
            System.out.println("Poor choice.");
        }
    }
}

扩展类:

import javax.swing.JButton;

public class Alterations extends FrameIt{

    private static final long serialVersionUID = 1L;

    public static void main(String args[]){
        new Alterations().setVisible(true);
        System.out.println("Doing it");
    }

    public Alterations(){
        JButton button2 = new JButton("Slightly different button");

    }
}

谢谢。

【问题讨论】:

  • 这个不需要继承。只需提供一个额外的构造函数,将按钮名称作为参数,并使用该名称而不是默认名称。

标签: java class jframe jbutton extends


【解决方案1】:

在子类Alterations 中创建JButton 实例没有任何区别,因为您没有将它连接到任何东西。

处理它的一种方法是更改​​原始类的构造函数。您可以使按钮的名称源自方法调用:

改变:

JButton button2 = new JButton("No, you should Click Me!");

收件人:

JButton button2 = new JButton(getSecondButtonName ());

那么getSecondButtonName()可以在原类中返回"No, you should Click Me!",你可以在子类中重写它返回"Slightly different button"

另一种方法是在子类的构造函数中删除原始按钮并添加新按钮。

只有在有真正理由首先创建子类时,这些解决方案才有意义。如果基类和子类之间的唯一区别是一个按钮的名称,那么就没有理由创建子类。

【讨论】:

  • 太棒了。以下是我用来使其工作的其他代码行: 原始类:public String getSecondButtonName() { return "Initial"; } 扩展类:public String getSecondButtonName() { return "ALTERED"; }
猜你喜欢
  • 2020-09-08
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多