package chapter08_oop3_teacher.src.com.atguigu08._interface.jdk8;/*** ClassName: CompareA* Description:** @Author 尚硅谷-宋红康* @Create 9:33* @Version 1.0*/ public interface CompareA {//属性:声明为public static final//方法:jdk8之前:只能声明抽象方法//方法:jdk8中:静态方法public static void method1(){System.out.println("CompareA:北京");}//方法:jdk8中:默认方法public default void method2(){System.out.println("CompareA:上海");}public default void method3(){System.out.println("CompareA:广州");}public default void method4(){System.out.println("CompareA:深圳");}//jdk9新特性:定义私有方法 // private void method5(){ // System.out.println("我是接口中定义的私有方法"); // } }
package chapter08_oop3_teacher.src.com.atguigu08._interface.jdk8;/*** ClassName: CompareB* Description:** @Author 尚硅谷-宋红康* @Create 9:39* @Version 1.0*/ public interface CompareB {public default void method3(){System.out.println("CompareB:广州");} }
package chapter08_oop3_teacher.src.com.atguigu08._interface.jdk8;/*** ClassName: SubClass* Description:** @Author 尚硅谷-宋红康* @Create 9:34* @Version 1.0*/ public class SubClass extends SuperClass implements CompareA,CompareB{@Overridepublic void method2() {System.out.println("SubClass:上海");}public void method3(){System.out.println("SubClass:广州");}public void method4(){System.out.println("SubClass:深圳");}public void method(){//知识点5:如何在子类(或实现类)中调用父类或接口中被重写的方法method4();//调用自己类中的方法super.method4(); //调用父类中的method3();//调用自己类中的方法CompareA.super.method3(); //调用接口CompareA中的默认方法CompareB.super.method3(); //调用接口CompareB中的默认方法} }
package chapter08_oop3_teacher.src.com.atguigu08._interface.jdk8;/*** ClassName: SubClassTest* Description:** @Author 尚硅谷-宋红康* @Create 9:34* @Version 1.0*/ public class SubClassTest {public static void main(String[] args) {//知识点1:接口中声明的静态方法只能被接口来调用,不能使用其实现类进行调用。CompareA.method1(); // SubClass.method1();//知识点2:接口中声明的默认方法可以被实现类继承,实现类在没有重写此方法的情况下,默认调用接口中声明的//默认方法。如果实现类重写了此方法,则调用的是自己重写的方法。SubClass s1 = new SubClass();s1.method2();//知识点3:类实现了两个接口,而两个接口中定义了同名同参数的默认方法。则实现类在没有重写此两个接口//默认方法的情况下,会报错。 ---->接口冲突//要求:此时实现类必须要重写接口中定义的同名同参数的方法。s1.method3();//知识点4:子类(或实现类)继承了父类并实现了接口。父类和接口中声明了同名同参数的方法。(其中,接口中的方法//是默认方法)。默认情况下,子类(或实现类)在没有重写此方法的情况下,调用的是父类中的方法。--->类优先原则s1.method4();} }
package chapter08_oop3_teacher.src.com.atguigu08._interface.jdk8;/*** ClassName: SuperClass* Description:** @Author 尚硅谷-宋红康* @Create 9:43* @Version 1.0*/ public class SuperClass {public void method4(){System.out.println("SuperClass:深圳");} }