繁体   English   中英

接口变量默认为final和static,方法是public和abstract

[英]interface variables are final and static by default and methods are public and abstract

问题是为什么在默认情况下决定将变量作为final和static以及方法作为public和abstract。

是否有任何特殊原因使它们成为隐式,变量为final和static,方法为public和abstract。

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

我们在Java中具有多重继承功能的接口,以避免钻石问题。 但它如何解决钻石问题,因为它不允许静态方法。

在下面的程序中,两个接口都有相同名称的方法..但实现只有一个我们实现...这是钻石问题的解决方法吗?

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!" );    
        }
}

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

因此,非公开的方法在接口中是无关紧要的。 与非静态数据成员相同,后者与特定实现更相关。

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

它们不允许接口中的静态方法,因为接口不具有任何功能。 这只是界面的定义。

Java没有菱形问题,因为接口不包含代码。 如果允许你的接口有代码,那么Java将无法确定它是否应该调用testInt的testMethod()或testInt1的testMethod()。 由于接口没有代码,Java知道testMethod只有一个实现,它需要运行代码。

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

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

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

也就是说,我不确定接口的默认值是什么,而不是类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM