当前位置: 首页 > 知识库问答 >
问题:

接口中的默认方法,但仅限于静态final字段

秋阳荣
2023-03-14

但是随着缺省方法的引入,接口也具有抽象类的所有功能。因此非静态和非最终字段也是必要的。

但当我尝试正常声明一个字段时,默认情况下它变成了静态的和最终的。

在Java8中有没有一种方法可以在接口中声明一个非静态的非final字段。

共有1个答案

公西英叡
2023-03-14

Java接口中的所有字段都是public static final

即使在添加了默认方法之后,在接口中引入可变字段仍然没有任何意义。

添加默认方法是因为接口演进的原因。您可以向接口添加新的默认方法,但只有在实现使用接口中已经定义的方法时才有意义:

public interface DefaultMethods {

    public int getValue();

    public default int getValueIncremented() {
        if (UtilityMethod.helper()) { // never executed, just to demonstrate possibilities
            "string".charAt(0); // does nothing, just to show you can call instance methods
            return 0;
        }

        return 1 + getValue();
    }

    public static class UtilityMethod {

        public static boolean helper() {
            return false;
        }
    }
}
 类似资料:
  • 当我注意到现在可以在接口中定义静态和默认方法时,我正在通过接口学习。 请解释两者的区别,如果有一个我们什么时候会使用它的例子,那就好了。界面上有点混乱。

  • 问题内容: Java 8在接口上引入了默认方法和静态方法。因此,现在无论使用默认方法还是静态方法,您都可以在界面中实现具体的实现。 Java声称添加这两种新方法的原因是“确保与为那些接口的较旧版本编写的代码二进制兼容”。 我的问题: 为什么为了支持现有的体系结构问题而扭曲应该完全抽象的接口原始概念? 使用抽象类和新版本的接口之间的区别除了一个类具有扩展多个接口的能力之外,还有什么区别? 问题答案:

  • Java8在接口上引入了默认和静态方法。因此,现在您可以在接口中有具体的实现,不管是使用默认方法还是静态方法。 Java声称添加这两种新方法的原因是“确保与为这些接口的旧版本编写的代码的二进制兼容性”。 null

  • 我为之编写的测试用例: 我还有最后一节课。 我已经在测试类中添加了以下代码: 但对我来说什么都不起作用。请建议在类中模仿方法的正确方法。

  • 我试图使用以下代码理解Java接口中的默认方法,但我无法编译它: 编译器生成了以下输出: 我无法理解这些错误。我如何更正代码中的问题?

  • 我有以下场景: 以下是我的问题: 如果中的静态方法是公共的,则编译错误将为: 静态方法m1()与I中的抽象方法冲突。 因此,当访问修饰符是默认值时,它试图隐藏,而当它是公共的时,它是冲突的。为什么会有这样的区别呢?背后的理念是什么?