sth*_*r69 1 java static interface member
我知道不推荐,但为什么我可以声明接口的成员变量不是静态的?
接口的静态成员和非静态成员之间有什么区别?我看到如果我将接口成员变量定义为static,我可以以非静态的方式在实现类中使用它:
接口:
public interface Pinuz {
final static int a;
public void method1();
}
Run Code Online (Sandbox Code Playgroud)
实施班级:
public class Test implements Pinuz {
public static void main(String[] args) {
Test t = new Test();
int b = t.a;
}
@Override
public void method1() {
// TODO Auto-generated method stub
}
}
Run Code Online (Sandbox Code Playgroud)
我只看到一个警告,要求我以静态方式使用成员a.
为什么我可以声明接口的成员变量不是静态的?
它隐含地 static(和final)(static即使你省略了static关键字也意味着它),如JLS中所述:
在接口的身体的每一个字段声明是含蓄
public,static和final.允许为这些字段冗余地指定任何或所有这些修饰符.
最终的原因是任何实现都可以更改成员的值,如果它没有被定义为final.然后该成员将成为实现的一部分,但正如您所知,它interface是一个纯粹的抽象.
原因static是成员属于接口,而不是实现实例.
另外,static你应该用类名引用它(否则你会得到一个编译器警告),而不是通过一些引用,所以int b = t.a;应该只是写成int b = Test.a;
| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |