java - 为什么接口(interface)中的所有字段都是隐式静态和最终的?

标签 java interface static final language-implementation

我只是想了解为什么接口(interface)中定义的所有字段都是隐含的 staticfinal。保持字段 static 的想法对我来说很有意义,因为您不能拥有接口(interface)的对象,但为什么它们是 final (隐式)?

任何人都知道为什么 Java 设计人员会在接口(interface)中制作 staticfinal 中的字段吗?

最佳答案

接口(interface)旨在指定交互契约,而不是实现细节。开发人员应该能够通过查看接口(interface)来使用实现,而不必查看实现它的类。

接口(interface)不允许您创建它的实例,因为您不能指定构造函数。所以它不能有实例状态,尽管接口(interface)字段可以定义常量,它们是隐式的静态和最终的。

您不能在接口(interface)中指定方法主体或初始化程序 block ,尽管从 Java 8 开始您可以使用主体指定默认方法。此功能旨在允许将新方法添加到现有接口(interface),而无需更新所有实现。但是如果不先创建一个实现接口(interface)的实例,您仍然无法执行这样的方法。

旁白:请注意,您可以使用匿名内部类实现接口(interface):

interface Foo {
    String bar();
}

class FooBar {
    Foo anonymous = new Foo() {
         public String bar() {
             return "The Laundromat Café";
    };
}

您必须提供接口(interface)的完整实现,才能编译匿名内部类。

new Foo() 正在使用其默认构造函数初始化匿名内部类。

关于java - 为什么接口(interface)中的所有字段都是隐式静态和最终的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513520/

相关文章:

java - 在 Java 中将对象与字符串相互转换的公认做法?

java - OrientDB,linux,java api,无法,打开,存储

.net - 接口(interface)扩展方法的 C# 命名约定

java - 如何多次实现相同的接口(interface),但使用不同的泛型?

C++ 'multiple definition' 静态枚举类成员编译错误

java - 在类中使用共享服务

不将 "inline"或 "static"关键字与无类函数一起使用时出现 C++ 重新定义链接错误

java - JTextArea/JTextComponent setText 导致崩溃

java - 下面的代码有什么问题

objective-c - .h 和 .m 文件中的@interface 定义之间的区别