扩展 java class 同时改变它
Extending a java class whilst also altering it
我潜伏在 Whosebug 上有一段时间了。我正在自学 Java,如果这是一个相当初级的问题,请多多包涵(虽然我在这里找不到答案)。
如果我有一个 java class(如下图所示),我希望将来 class 以稍微不同的方式使用它(例如更改按钮 text/or 输出),有没有办法通过扩展原来的 class?
在下面的例子中,我有一个带有两个按钮的 JFrame,它们将不同的文本打印到控制台。我只是想在更改其中一个按钮名称的同时扩展此 class。
原版CLASS:
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.");
}
}
}
CLASS 延伸:
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");
}
}
谢谢。
在子 class Alterations
中创建 JButton
实例没有任何区别,因为您没有将它连接到任何东西。
一种处理方法是更改原始 class 的构造函数。您可以使按钮的名称源自方法调用:
变化:
JButton button2 = new JButton("No, you should Click Me!");
收件人:
JButton button2 = new JButton(getSecondButtonName ());
那么getSecondButtonName()
可以在原来的class中return"No, you should Click Me!"
并且可以在子class中重写为return "Slightly different button"
.
另一种方法是删除子class构造函数中的原始按钮并添加新按钮。
只有当有真正的理由首先创建子class时,这些解决方案才有意义。如果 base class 和 sub-class 之间的唯一区别是一个按钮的名称,则没有理由创建 sub-class.
我潜伏在 Whosebug 上有一段时间了。我正在自学 Java,如果这是一个相当初级的问题,请多多包涵(虽然我在这里找不到答案)。
如果我有一个 java class(如下图所示),我希望将来 class 以稍微不同的方式使用它(例如更改按钮 text/or 输出),有没有办法通过扩展原来的 class?
在下面的例子中,我有一个带有两个按钮的 JFrame,它们将不同的文本打印到控制台。我只是想在更改其中一个按钮名称的同时扩展此 class。
原版CLASS:
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.");
}
}
}
CLASS 延伸:
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");
}
}
谢谢。
在子 class Alterations
中创建 JButton
实例没有任何区别,因为您没有将它连接到任何东西。
一种处理方法是更改原始 class 的构造函数。您可以使按钮的名称源自方法调用:
变化:
JButton button2 = new JButton("No, you should Click Me!");
收件人:
JButton button2 = new JButton(getSecondButtonName ());
那么getSecondButtonName()
可以在原来的class中return"No, you should Click Me!"
并且可以在子class中重写为return "Slightly different button"
.
另一种方法是删除子class构造函数中的原始按钮并添加新按钮。
只有当有真正的理由首先创建子class时,这些解决方案才有意义。如果 base class 和 sub-class 之间的唯一区别是一个按钮的名称,则没有理由创建 sub-class.