我在Java 8中实现了defender(默认)方法的实际实现,其中我有一个页面的默认settin和特定页面的一些附加功能。基本上,我必须首先调用默认方法,然后调用overriden方法,如下例所示:
interface A {
default void foo() {
System.out.println("This is default foo method of interface A");
}
}
class B implements A {
public void foo() {
A.super.foo(); //This statement is confusing
System.out.println("This method is from class B");
}
}
经过一些搜索,我找到了一种方法,使用A.super.foo()做同样的事情,但不太明白这个语句是如何工作的。 此外,当我检查接口A的变量和方法时(通过在Eclipse中给出'A'(点),我只能看到2个变量,即'this'和'class'。没有super存在。
这个A.super.foo()如何正常工作?请帮忙。
答案 0 :(得分:1)
语法A.super.foo()似乎类似于A.this,一个合格的引用。由于defender方法为您提供了一种多重继承,因此super变得暧昧,您需要使用A.super来限定它。