接口2
JDK8及以后:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
知识点1:接口中定义的静态方法中,只能通过接口来调用。
知识点2:通过类的对象,可以调用接口中的默认方法
如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写后的方法
知识点3:如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的默认方法,那么子类在没有重写此方法的情况下,默认调用的是父类中同名同参的方法。–>类优先原则
知识点4:如果实现类实现了多个接口,而这多个接口中定义了同名同参的默认方法,那么实现类在没有重写此方法的情况下,报错。–>接口冲突。
这就需要我们在实现类中重写此方法。
知识点5:如何在子类(或实现类)的方法中调用父类和接口中被重写的方法
public void myMethod() {
method3();//调用自己定义重写的方法
super.method3();//调用父类中声明的方法
//调用接口中默认方法
CompareA.super.method3();
CompareB.super.method3();
}
在B站学习java写的代码
代码如下
CompareA接口
package com.day0131_4; /* * JDK8及以后:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法 * */ public interface CompareA { //静态方法 public static void method1() { System.out.println("CompareA:北京"); } //默认方法 public default void method2() { System.out.println("CompareA:上海"); } default void method3() { System.out.println("CompareA:上海"); } }
CompareB接口
package com.day0131_4; public interface CompareB { default void method3() { System.out.println("CompareB:北京"); } }
SuperClass类
package com.day0131_4; public class SuperClass { public void method3() { System.out.println("SuperClass:北京"); } }
SubClassTest类
package com.day0131_4; public class SubClassTest { public static void main(String[] args) { SubClass s= new SubClass(); // s.method1();//The method method1() is undefined for the type SubClass // SubClass.method1();//The method method1() is undefined for the type SubClass //知识点1:接口中定义的静态方法中,只能通过接口来调用。 CompareA.method1(); //知识点2:通过类的对象,可以调用接口中的默认方法 //如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写后的方法 s.method2(); //知识点3:如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的默认方法, //那么子类在没有重写此方法的情况下,默认调用的是父类中同名同参的方法。--类优先原则 s.method3(); //知识点4:如果实现类实现了多个接口,而这多个接口中定义了同名同参的默认方法, //那么实现类在没有重写此方法的情况下,报错。-->接口冲突。 //这就需要我们在实现类中重写此方法。 SubClass1 s1= new SubClass1(); s1.method3(); } } class SubClass extends SuperClass implements CompareA,CompareB{ public void method2() { System.out.println("SubClass:上海"); } //知识点5:如何在子类(或实现类)的方法中调用父类和接口中被重写的方法 public void myMethod() { method3();//调用自己定义重写的方法 super.method3();//调用父类中声明的方法 //调用接口中默认方法 CompareA.super.method3(); CompareB.super.method3(); } } class SubClass1 implements CompareA,CompareB{ public void method2() { System.out.println("SubClass1:上海"); } public void method3() { System.out.println("SubClass1:深圳"); } }