Meh*_*lik 2 java inheritance overriding java-8 default-method
我有一个class
(Say FOO
),它有一个具有default
可见性的方法,如下所示:
void sayHi() {}
Run Code Online (Sandbox Code Playgroud)
现在,如果在扩展类I时覆盖此方法无法降低其可见性.所以我只能使用default
或public
.
public class MyClassTest extends FOO {
@Override
// Or I can use public void sayHi()
void sayHi() {
System.out.println("Overriden sayHi");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用下面的默认方法在Java 8中编写接口:
public interface InterfaceX {
// Java-8 defalu method
default String printName() {
System.out.println("Interface1 default metod");
return "Interface1 default metod";
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我在类中重写此方法它应该编译,如果保持重写方法的可见性default
.
public class Java8InterfaceTest implements InterfaceX{
@Override
void printHello() {
System.out.println("Printing..!");
Interface1.super.printName();
}
}
Run Code Online (Sandbox Code Playgroud)
它说
无法从InterfaceX降低继承方法的可见性
我已经知道,在每一个方法interface
的public
默认,但在上面的例子中,我们使用default
,我认为是一个access modifier
中java
.
我有以下问题:
default
在interface
不同default
的可见性没有被施加访问修饰符时提供?default
与默认可见性无关.甲default
在接口方法是具有界面内的默认的实现方法.
该方法的可见性仍然存在public
.
因此,在您的Java8InterfaceTest
类中实现的方法必须具有public
可见性:
public void printHello() {
...
}
Run Code Online (Sandbox Code Playgroud)