接口采用默认方法初始化

时间:2014-11-14 04:45:07

标签: java methods interface default

即使重写了此方法,也会初始化具有默认方法的接口,即使它根本没有被调用。

示例:

    public interface I {
    int a = foo();
     default void test1(){
     }
    static int foo(){
        System.out.println("I initialized");
        return 15;
    }
}


    public class C implements I{
     public void test2(){
          System.out.print("C initialized");
      }
}


    public class Test {
      public static void main(String[] args) {    
         C c = new C();
         c.test2();
      }   
}

打印

I initialized
C initialized

这里究竟出现了什么问题?

1 个答案:

答案 0 :(得分:0)

您已定义字段a;编译器不知道你从未在实现中访问它。它必须运行方法来确定值。

int a = foo(); // <-- must run foo.
static int foo(){
    System.out.println("I initialized"); // <-- prints I initialized 
    return 15;
}

a = 15

test1test2无关,但即使它foo()仍然需要进行评估以设置a