从内部接口的默认方法访问实例变量

时间:2014-09-08 10:25:44

标签: java static java-8

鉴于我们现在在Java 8中的default上有interface个方法,我们是否可以通过内部(非static)的父类访问实例方法interface,例如:

public class App {

    int appConst = 3;

    public interface MyInstanceInterface {

        default int myAppConst() {
            return appConst;
        }
    }
}

我的interface不是static,因此能够访问appConst上下文中的App.this

此代码因以下编译错误而失败:

  

错误:无法从静态上下文引用非静态变量appConst

为什么吗

1 个答案:

答案 0 :(得分:8)

原因是JLS §8.5.1

  

成员接口是隐式静态的(第9.1.1节)。允许声明成员接口冗余地指定静态修饰符。

内部interface永远不能是非static。声明:

public class App {

    ...      

    public interface MyInterface {

        ...

    }
}

完全等同于:

public class App {

    ...      

    public static interface MyInterface {

        ...

    }
}

N.B:情况一直如此,在Java 8中保持不变。