Java中的抽象类和接口实例化性能

时间:2018-02-12 00:27:09

标签: java performance interface abstract

假设我想创建一个Button类,我有两个选择:

    abstract class Button {

        Button() { }

        abstract void action();
    }

当按下按钮时,将调用action(),在这种情况下,我将实例化我的按钮:

    new Button() {
        void action() {
            ...
        }
    };

另一个选项是:

    interface ButtonAction {
        run();
    }
    class Button {

        ButtonAction action;

        Button(ButtonAction action) {
            this.action = action;
        }

    }

当按下按钮时,将调用action.run(),我将实例化这样的按钮:

    new Button(new ButtonAction() {
        void action() {
            ...
        }
    };

我的问题是,有一种坏的和好的方式,还是只取决于我?这两个按钮实例化之间是否存在性能差异(我经常需要实例化一串按钮)?

2 个答案:

答案 0 :(得分:2)

我不担心像这样的微观优化性能。此决定不会对您的应用程序产生任何有意义的影响。

但是,我会使用section选项,您可以将操作传递给构造函数,原因有几个。它解决了问题。您的按钮对象不必担心它必须执行的操作的详细信息。如果要添加setter来更改操作,该怎么办?然后抽象方法选项分解。第二个选项还可以更轻松地从按钮单独测试操作。一般来说,赞成委托而不是继承。

答案 1 :(得分:0)

这种情况没有太大的性能差异。但是你应该记住,抽象类用于保存通用逻辑,即你想在每个动作执行后打印一些消息。如果没有通用逻辑,则应使用接口。