JButton的Java子类重写了setEnabled方法的问题

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)

aio*_*obe 8

你需要改变

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必须覆盖或实现超类型方法.