jhl*_*u87 4 java inheritance swing jbutton method-hiding
我有一个名为ImageButton的自定义按钮类,它扩展了JButton.在其中我有一个我想要调用的setEnabled方法而不是JButton的setEnabled方法.
我的代码如下.在我的另一个类中,我创建了一个ImageButton的新实例,但是当我尝试使用setEnabled方法时,它会直接进入JButton的setEnabled方法.甚至在我运行代码之前,我的IDE就告诉我从未使用过ImageButton的setEnabled方法.如果我将方法更改为"SetOn",它可以正常工作.那么为什么我不能使用与超类相同的名字呢?我认为它应该隐藏超类方法,如果它是相同的名称?
public class ImageButton extends JButton{
public ImageButton(ImageIcon icon){
setSize(icon.getImage().getWidth(null),icon.getImage().getHeight(null));
setIcon(icon);
setMargin(new Insets(0,0,0,0));
setIconTextGap(0);
setBorderPainted(true);
setBackground(Color.black);
setText(null);
}
public void setEnabled(Boolean b){
if (b){
setBackground(Color.black);
} else {
setBackground(Color.gray);
}
super.setEnabled(b);
}
}
Run Code Online (Sandbox Code Playgroud)
你需要改变
public void setEnabled(Boolean b){
Run Code Online (Sandbox Code Playgroud)
至
public void setEnabled(boolean b){
^
Run Code Online (Sandbox Code Playgroud)
(通过使用Boolean而不是boolean你重载的方法,而不是覆盖它.)
我鼓励你总是注释用于覆盖另一个方法的方法@Override.如果你在这种情况下已经完成了,编译器就会抱怨并说出类似的话
setEnabled(Boolean)类型的方法ImageButton必须覆盖或实现超类型方法.