Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么接口变量是公共的_Java_Interface - Fatal编程技术网

Java 为什么接口变量是公共的

Java 为什么接口变量是公共的,java,interface,Java,Interface,我知道Java接口变量默认为公共静态变量和最终变量 我明白了为什么它们是静态的和最终的 但我并没有解释为什么接口变量在默认情况下是公共的 如果有人知道为什么接口变量总是公共的,为什么我们不能在接口中有一个受保护的或默认的变量,请解释我 请不要让我在谷歌上搜索它,因为我已经在谷歌上搜索了两个多小时,而且没有任何网站明确解释为什么默认情况下这些变量是公开的 我也看到了下面的内容,但没有关于我的查询的明确信息。界面是“行为蓝图”。与类不同,它们不应该(也不应该)有状态 由于实例变量表示对象的状态,因此

我知道Java接口变量默认为公共静态变量和最终变量

我明白了为什么它们是静态的和最终的

但我并没有解释为什么接口变量在默认情况下是公共的

如果有人知道为什么接口变量总是公共的,为什么我们不能在接口中有一个受保护的或默认的变量,请解释我

请不要让我在谷歌上搜索它,因为我已经在谷歌上搜索了两个多小时,而且没有任何网站明确解释为什么默认情况下这些变量是公开的

我也看到了下面的内容,但没有关于我的查询的明确信息。

界面是“行为蓝图”。与类不同,它们不应该(也不应该)有状态

由于实例变量表示对象的状态,因此接口没有实例变量(私有或公共)。
由于私有静态变量表示类的状态,因此它们也没有私有静态变量。

接口具有使用类需要与外部通信的函数。通过这种方式,您可以拥有几个不同的类,这些类对于调用类都具有相同的函数

现在,如果在接口中创建一个变量,如果该变量不是公共的,它会带来什么?接口用于泛化与其他类的通信,如果变量或函数不是公共的,则不能从其他类使用。
我希望这将对您有所帮助。

接口设计为对象之间的通信方式。这就是为什么所有方法都必须公开。这只是一种设计选择


编辑:正如@jwenting所建议的,最好说这是一个核心架构选择,而不是设计选择。

对不起@JordiCastilla。查看我的最新编辑。一些输入错误。你还想要什么其他的可访问性?你有一个实际可行的具体场景吗?@Damien_The_unsiver,我没有任何具体场景。由于我是一名培训师,当我进行培训时,我的学员可能会问这样的问题。我想对这个特殊的概念有深入的了解。我想,如果我就此发表一个问题,对其他人也可能有用。
private
-每个实现都必须实现一个无人能调用的函数<代码>受保护-每个实现都必须实现一个只有该实现才能调用的函数。你能看到这两个的用途吗?因为他们就是这样设计的。你到底希望得到什么样的答案?谢谢你的反馈@jwenting!我已经根据它修正了我的答案。它在Java8之前是有意义的。因为Java8支持接口中的默认函数定义,所以IMO使用私有静态变量是有意义的。你说得对。尽管如此,在IMO中,由于默认定义主要是维护向后兼容性的一种方式,所以使用静态变量作为状态不应该被滥用。不足为奇,Java8的“默认定义”是其最具争议的特性之一,因为它很容易被滥用,导致代码混乱。