您不能在下面的
块中声明一个接口public void greetInEnglish() {
interface HelloThere {
public void greet();
}
class EnglishHelloThere implements HelloThere {
public void greet() {
System.out.println("Hello " + name);
}
}
HelloThere myGreeting = new EnglishHelloThere();
myGreeting.greet();
}
在This Oracle tutorial 中,我得到了“你不能在本地类中声明成员接口。”因为“接口本质上是静态的。”
我是eagar用更合理的信息来理解这一点,为什么以及界面本身是如何静态的?
为什么上面的代码没有意义?
提前感谢elloborate!
答案 0 :(得分:2)
我是eagar用更合理的信息来理解这一点,为什么和 界面本身是如何静态的?
因为接口是隐式静态的,并且你不能在内部类中使用非最终静态。
为什么它们是静态的?
因为这就是他们设计它的方式。
为什么上面的代码没有意义?
由于上述原因,
现在让我们简单一点:
静态意味着什么 - “与特定实例无关”。因此,假设类Foo
的静态字段是一个不属于任何Foo
实例的字段,而是属于Foo
类本身。
现在想想接口是什么 - 它是一个契约,一个实现它的类承诺提供的方法列表。另一种思考方式是接口是一组“与特定类无关”的方法 - 任何类都可以实现它,只要它提供这些方法。
所以,如果一个接口与任何特定的类没有关系,显然一个人无法与一个类的实例相关 - 对吧?
答案 1 :(得分:0)
如果未将字段定义为final,则任何实现都可以更改字段的值。然后它们将成为实现的一部分。接口是纯粹的规范,没有任何实现。
如果它们是静态的,那么它们属于接口,而不是对象,也不属于对象的运行时类型。
接口为客户端提供了与对象交互的方式。如果变量不公开,则客户端将无法访问它们。
答案 2 :(得分:0)