首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缺省情况下,接口变量是final和静态的,方法是公共的和抽象的

缺省情况下,接口变量是final和静态的,方法是公共的和抽象的
EN

Stack Overflow用户
提问于 2010-04-14 16:08:47
回答 3查看 28.9K关注 0票数 4

问题是,为什么默认情况下决定将变量作为final和static,将方法作为公共和抽象。

有没有什么特别的理由让它们隐含,变量作为最终的和静态的,方法作为公共的和抽象的。

为什么他们不允许静态方法,而允许静态变量?

我们的接口使得Java具有多重继承的特性,并且避免了菱形问题。但它如何解决菱形问题,因为它不允许静态方法。

在下面的程序中,两个接口都有具有相同name..but的方法,而只实现了一个我们implement...is这个菱形问题是如何解决的?

代码语言:javascript
运行
复制
interface testInt {
    int m = 0;
    void testMethod();
}

interface testInt1 {
    int m = 10;
    void testMethod();
}

public class interfaceCheck implements testInt, testInt1{
        public void testMethod() {
            System . out . println ( "m is"+ testInt.m );   
             System . out . println ( "Hi World!" );    
        }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-14 16:40:14

在我看来,接口声明了实现者必须具备的一组能力。它更多的是指“什么”而不是“如何”;它更多的是一种规范而不是一种实现指南。

因此,非公共的方法在接口中是不相关的。非静态数据成员也是如此,非静态数据成员更多地与具体实现相关。

票数 5
EN

Stack Overflow用户

发布于 2010-04-14 16:42:19

至于为什么它们是它们的默认值--这只是语言规范。他们把它设计成这样,所以它是这样的。

他们不允许在接口中使用静态方法,因为接口不应该有任何功能。这只是一个接口的定义。

Java不存在菱形问题,因为接口不包含代码。如果你的接口被允许有代码,那么Java就不能决定它应该调用testInt的testMethod()还是testInt1的testMethod()。由于接口没有代码,Java知道只有1个testMethod实现需要运行代码。

票数 2
EN

Stack Overflow用户

发布于 2010-04-14 16:39:02

我认为非静态变量在接口中是不允许的,主要是出于实用的原因。通过这种方式,多重继承可以更有效,并且避免了一些歧义问题。

顾名思义,接口只是实例上可用操作的定义,因此,它不包含任何方法实现。

由于这些原因,允许方法不是公共的,变量不是静态的是没有任何意义的。

也就是说,我不确定为接口和类设置不同的默认值是不是一个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2635807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档