我知道不建议这样做,但为什么我可以声明接口的成员变量不是静态的?
接口的静态成员和非静态成员之间有什么区别?我看到如果我将接口成员变量定义为static,我可以以非静态的方式在实现类中使用它:
接口:
public interface Pinuz {
final static int a;
public void method1();
}
实施班级:
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
}
}
我只看到一个警告,要求我以静态方式使用成员a。
答案 0 :(得分:5)
为什么我可以声明接口的成员变量不是静态的?
隐含地 static
(和final
)(即使您省略static
关键字),static
也是public
,{ {3}}:
界面正文中的每个字段声明都隐含
static
,final
和final
。允许为这些字段冗余地指定任何或所有这些修饰符。
最终的原因是任何实现都可以更改成员的值,如果它没有定义为interface
。然后该成员将成为实现的一部分,但正如您所知,static
是纯粹的抽象。
成为static
的原因是成员属于接口,而不是实现实例。
另外,作为int b = t.a;
,你应该用类名引用它(否则你得到编译器警告),而不是通过一些引用,所以int b = Test.a;
应该只写作为[conn invalidateAndCancel]
答案 1 :(得分:0)
您无法在Java界面中声明非静态变量。 接口中的每个变量都是隐式的public,static和final。
答案 2 :(得分:0)
接口的所有成员变量,无论您是否声明它们是静态的,都是静态的