扩展java类的同时对其进行修改
我在stackoverflow上潜伏了一段时间。我在自学Java,如果这是一个相当基本的问题,请耐心听我说(虽然我在这里找不到答案) 如果我有一个java类(如下面的一个),我希望在以后的类中以稍微不同的方式使用它(例如更改按钮文本/或输出),有没有办法通过扩展原始类来实现这一点 在下面的例子中,我有一个带有两个按钮的JFrame,可以将不同的文本打印到控制台。我只是想在更改按钮名称的同时扩展这个类 原始类:扩展java类的同时对其进行修改,java,class,jframe,jbutton,extends,Java,Class,Jframe,Jbutton,Extends,我在stackoverflow上潜伏了一段时间。我在自学Java,如果这是一个相当基本的问题,请耐心听我说(虽然我在这里找不到答案) 如果我有一个java类(如下面的一个),我希望在以后的类中以稍微不同的方式使用它(例如更改按钮文本/或输出),有没有办法通过扩展原始类来实现这一点 在下面的例子中,我有一个带有两个按钮的JFrame,可以将不同的文本打印到控制台。我只是想在更改按钮名称的同时扩展这个类 原始类: import java.awt.GridLayout; import java.awt
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");
}
}
扩展的类:
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");
}
}
谢谢。在子类
中创建JButton
实例将不会有任何区别,因为您不将它连接到任何东西
处理它的一种方法是更改原始类的构造函数。您可以使按钮的名称源自方法调用:
更改:
JButton button2 = new JButton("No, you should Click Me!");
致:
然后getSecondButtonName()
可以在原始类中返回“否,您应该单击我!”
,并且可以在子类中重写它以返回“稍微不同的按钮”
另一种方法是删除子类构造函数中的原始按钮并添加新按钮
只有当有真正的理由首先创建一个子类时,这些解决方案才有意义。如果基类和子类之间的唯一区别是一个按钮的名称,那么就没有理由创建子类。在子类中创建JButton
实例将不会有任何区别,因为您不会将它连接到任何东西
处理它的一种方法是更改原始类的构造函数。您可以使按钮的名称源自方法调用:
更改:
JButton button2 = new JButton("No, you should Click Me!");
致:
然后getSecondButtonName()
可以在原始类中返回“否,您应该单击我!”
,并且可以在子类中重写它以返回“稍微不同的按钮”
另一种方法是删除子类构造函数中的原始按钮并添加新按钮
只有当有真正的理由首先创建一个子类时,这些解决方案才有意义。如果基类和子类之间的唯一区别是一个按钮的名称,则没有理由创建子类。不需要继承。只需提供一个以按钮名称为参数的附加构造函数,并使用该名称而不是默认名称。不需要继承。只需提供一个以按钮名称为参数的附加构造函数,并使用该名称而不是默认名称。No No No modHFGen.dll。下面是我用来让它工作的其他代码行:原始类:publicstringgetsecondbuttonname(){return“Initial”}
扩展类:publicstringgetsecondbuttonname(){return“ALTERED”;}
。下面是我用来让它工作的其他代码行:原始类:publicstringgetsecondbuttonname(){return“Initial”}
扩展类:publicstringgetsecondbuttonname(){return“ALTERED”}