受到问题Interface vs Abstract Classes的刺激和接受的答案,我想有一个更详细和澄清的答案。特别是我无法理解“接口(interface)中的字段是隐式静态和最终的”这句话。这是否意味着实现包含方法 foo() 的接口(interface)的类 A 可以调用该方法作为 A.foo()
?
关于final:只要接口(interface)只包含方法,给定一个抽象类A,它实现一个带有方法foo()
的接口(interface),以及一个普通的类B
,扩展抽象类A
,类B
不能重写foo方法吗?就我而言,final 方法是不可能被重写的。最终什么是真的?
最佳答案
"a field in an interface is implicitly static and final".
在界面中编写
int N = 1;
public int N = 1;
static int N = 1;
public static int N = 1;
// also
final int N = 1;
public final int N = 1;
static final int N = 1;
public static final int N = 1;
都是一样的。
Does it mean that a class A implementing an interface containing method foo() can invoke the method as A.foo()
字段和方法都是成员,但方法和字段不是同一件事。
接口(interface)中的方法不能是static
或final
,但必须是隐式公共(public)和抽象的
int foo();
public int foo();
abstract int foo();
public abstract int foo();
对于接口(interface)来说都是相同的。
As far as I am concerned, final methods are impossible to be overridden
最终实例方法不能被覆盖,最终静态方法不能被隐藏。
类似地,嵌套接口(interface)、类和注释都是公共(public)的和静态的。嵌套接口(interface)和注释也是隐式抽象的。
interface A {
public static class C { }
public static /* final */ enum E {; }
public static abstract interface I { }
public static abstract @interface A { }
}
关于java - 接口(interface)的静态字段和最终字段的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12216480/