gpt4 book ai didi

Java - 接口(interface)的非静态成员变量

转载 作者:行者123 更新时间:2023-11-29 07:36:45 29 4
gpt4 key购买 nike

我知道不推荐,但是为什么我可以声明一个接口(interface)的成员变量不是静态的呢?

接口(interface)的静态成员和非静态成员有什么区别?我看到如果我将一个接口(interface)成员变量定义为静态的,我可以在实现类中以非静态的方式使用它:

接口(interface):

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。

最佳答案

Why can I declare a member variable of an interface not static?

它是隐式 static(和final)(这意味着它是static,即使您省略了static 关键字), as stated in the JLS :

Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted to redundantly specify any or all of these modifiers for such fields.

成为 final 的原因是任何实现都可以更改成员的值,如果它没有定义为 final。然后该成员将成为实现的一部分,但如您所知,接口(interface) 是一个纯粹的抽象。

static 的原因是成员属于接口(interface),而不是实现实例。

另外,作为static,你应该只用类名来引用它(否则你会得到一个编译器警告),而不是通过一些引用,所以 int b = t.a; 应该写成 int b = Test.a;

关于Java - 接口(interface)的非静态成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34761534/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com