gpt4 book ai didi

java - 更改 java 8 默认方法的可见性

转载 作者:行者123 更新时间:2023-12-01 00:37:25 24 4
gpt4 key购买 nike

我有一个 class (说 FOO )它有一个方法 default能见度,
如下所示:

void sayHi() {}

现在,如果在扩展类中重写此方法,我无法降低它的可见性。所以我只能用 defaultpublic .
public class MyClassTest extends FOO {
@Override
// Or I can use public void sayHi()
void sayHi() {
System.out.println("Overriden sayHi");
}
}

现在,如果我使用如下默认方法在 Java 8 中编写接口(interface):
public interface InterfaceX {

// Java-8 defalu method
default String printName() {
System.out.println("Interface1 default metod");
return "Interface1 default metod";
}
}

现在,如果我在一个类中重写此方法 如果保持重写方法的可见性 default,它应该编译.
public class Java8InterfaceTest implements InterfaceX{
@Override
void printHello() {
System.out.println("Printing..!");
Interface1.super.printName();
}
}

它说

Cannot reduce the visibility of the inherited method from InterfaceX



我已经知道 interface 中的每个方法在 public默认情况下,但在上面的示例中,我们使用 default我认为是 access modifier 之一在 java .

我有以下问题:
  • defaultinterface不同于 default没有应用访问修饰符时提供的可见性?
  • 如果不同,那它有什么不同呢?
  • 最佳答案

    default与默认可见性无关。一个 default接口(interface)中的方法是在接口(interface)中具有默认实现的方法。

    该方法的可见性仍然是public .

    因此,在您的 Java8InterfaceTest 中实现的方法类必须有 public能见度:

    public void printHello() {
    ...
    }

    关于java - 更改 java 8 默认方法的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47654211/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com