为什么接口变量需要初始化

时间:2018-03-08 08:13:31

标签: java oop interface

我想创建一个接口,强制所有实现它的类定义一个静态的最终整数变量:

public interface FooInterface {
    static final int bar;
}

但是编译器说"变量' bar'可能尚未初始化" 。为什么我必须在界面中给它一个值?我希望每个实现都定义自己的值,所以对我来说似乎不合逻辑,我必须在那里添加一些永远不会被使用的任意数字。

6 个答案:

答案 0 :(得分:4)

您无法通过界面执行此操作。接口中的所有变量都隐式public final static

您可以在界面中定义int getBar();,然后所有实现类都需要返回一个值。

然后,您有责任确保实现者表现良好,但您无法阻止实现返回不同的值,例如

public class Foo implements Bar {
    public int getBar() {
        return (int) System.currentTimeMillis();
    }
}

答案 1 :(得分:3)

你从错误的角度思考这个问题。

在实现类中无法覆盖System.IO

你可能想这样做:

static final

答案 2 :(得分:2)

你做不到。接口只能强制实现它的类来实现方法。

接口中定义的静态变量属于接口。它不强制实现类声明相同的变量。

答案 3 :(得分:0)

接口中的每个变量都是静态的和最终的。必须在第一行或构造函数中初始化最终变量。因为接口没有构造函数,所以必须在第一行初始化final变量。

答案 4 :(得分:0)

因为它们是最终的,所以需要初始化最终变量。

答案 5 :(得分:0)

在普通类中,我们可以选择像这样定义它并在静态初始化程序块中初始化它的值:

public class FooClass {
    static final int bar;

    static {
        bar = 5;
    }
}

如果是接口,则不允许使用静态初始化块,这就是Java要求在声明时将其设置为值的原因。