package com.atguigu.java2;
/*
* jdk1.8新特性
*/
public interface CopareA {
//静态方法
public static void method1() {
System.out.println("CompareA: 北京");
}
//默认方法
public default void method2() {
System.out.println("CompareA: 上海");
}
default void method3() {
System.out.println("CompareA: 上海");
}
}
package com.atguigu.java2;
public class SubClassTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
SubClass s = new SubClass();
//1.接口中定义的静态方法,只能通过接口来调用
// SubClass.method1();error
// s.method1(); error
CopareA.method1();
//2.可以通过实现类的对象,调用默认的方法
//如果实现类重写了接口的默认方法,调用时,任然调用重写的方法
s.method2();
//3.如果子类继承了(或实现类)父类和实现的接口中声明了同名同参数的方法
//那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法---》类优先原则
s.method3();
// SubClass.method2(); error
//4.如果实现类实现了多个接口,而多个接口中定义了同名同参数的默认方法
//那么实现类没有冲刺额此方法的情况下--》接口冲突
//这就需要我们必须实现类中重写此方法
s.myMethod();
}
}
class SubClass extends SuperClass implements CopareA, CompareB{
public void method2() {
System.out.println("Compare:拉拉");
}
public void method3() {
System.out.println("SubClass 深圳");
}
//5 如何在子类中(或实现类)的方法中调用父类,接口中被重写的方法
public void myMethod() {
method3();//调用自己定义的重写的方法
super.method3();//调用父类中声明的
//调用接口中的默认的方法
CopareA.super.method3();
CompareB.super.method3();
}
}
package com.atguigu.java2;
public class SuperClass {
public void method3() {
System.out.println("父类中的方法");
}
}
package com.atguigu.java2;
public interface CompareB {
public default void method3() {
System.out.println("B is running");
}
}
package com.atguigu.java2;
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 implements Filial,Spoony{
@Override
public void help() {
System.out.println("我该救谁呢?");
Filial.super.help();
Spoony.super.help();
}
}