看尚硅谷视频代码有点疑惑
package com.atguigu.java8;
interface Filial {// 孝顺的
default void help() {
System.out.println("老妈,我来救你了");
}
}
interface Spoony {// 痴情的
default void help() {
System.out.println("媳妇,别怕,我来了");
}
}
class Father{
public void help(){
System.out.println("儿子,就我媳妇!");
}
}
class Man extends Father implements Filial, Spoony {
@Override
public void help() {
System.out.println("我该就谁呢?");
Filial.super.help();
Spoony.super.help();
}
}
这里他为什么要super
然后改了代码调试了一下
package com.sql.exer;
interface Filial {// 孝顺的
default void help() {
System.out.println("老妈,我来救你了");
}
}
interface Spoony {// 痴情的
static void help() {
System.out.println("媳妇,别怕,我来了");
}
}
class Father{
public void help(){
System.out.println("儿子,就我媳妇!");
}
}
class Man extends Father implements Filial, Spoony {
@Override
public void help() {
System.out.println("我该就谁呢?");
Filial.super.help();
Spoony.help();
}
}
public class interfaceTest {
public static void main(String[] args) {
Man m = new Man();
m.help();
}
}
总结一下:
-
接口内定义的静态方法(static), 调用方式接口名.方法名
-
通过实现类的对象,可以调用接口中的默认方法(default)
这里他需要调用默认方法,就需要用类的对象来调用,这里直接Filial显然是错误的。
然后调用方法直接Filial.m.help他又识别不出来。
我们直接this.help更不靠谱死循环。
索性背住好了,写代码的时候编译器会给提示 遇到这种类型直接接口名.super.方法名