如何在执行现有类的本地继承时实现接口

时间:2015-07-18 07:50:15

标签: java interface polymorphism override

我需要从一个修改过的类(例如From JButton)创建一个对象。此修改包括添加简单方法和实现其他接口,如下所示:

var ec = 0;
$.each($.trim(value).replace(/,$/, '').split(','), $.proxy(function (index, email) {
    ec++;
    if (!$.validator.methods.email.call(this, $.trim(email), element)) {
        valid = false;
    }
}, this));
if (ec<1 || ec>10) valid = false;

甚至可能吗?是的,如何实施呢?

我不想为它创建单独的类,特别是当我有一大堆要修改它们时,我不经常使用它们的对象。

2 个答案:

答案 0 :(得分:1)

使用抽象类将update实现为接口:

import javax.swing.JButton;
public abstract class UpdateableJButton extends JButton implements Updateable {
    // ...
}

可更新界面:

public interface Updateable {

    public void update();
}

现在您可以使用省略update实现的抽象类:

UpdateableJButton button = new UpdateableJButton() {
    @Override
    public void update() {
        // add specific implementation
    }
};

答案 1 :(得分:1)

如果您想使用匿名内部类执行此操作,则需要按如下方式修改Updatable接口:

interface Updatable<T> {
    public void update();
    public void setComponent(T t);
}

然后,您可以轻松地为不同的组件创建匿名内部类。

可更新的JButton

Updatable<JButton> updatableButton = new Updatable<JButton>() {
        private JButton jButton;

        public void setComponent(JButton jButton) {
            this.jButton = jButton;
        }

        public void update() {
            jButton.setText("someText");
        }   
    };

    updatableButton.setComponent(new JButton());
    updatableButton.update();

可更新的JLabel

Updatable<JLabel> updatableJLabel = new Updatable<JLabel>() {
        private JLabel jLabel;

        public void setComponent(JLabel jButton) {
            this.jLabel = jButton;
        }

        public void update() {
            jLabel.setText("someText");
        }   
    };

    updatableJLabel.setComponent(new JLabel());
    updatableJLabel.update();

您不再需要创建一个您想要的新类。