Demo01Interface
package InterfaceandExtend;
/*
* 1.接口不能有静态代码块和构造方法
* 2.一个类的直接父类是唯一的,但是一个类可以同事实现多个接口。
* public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB {}
* 3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
* 4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
* 5.如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。(第3条和第五条是类似的,只要一样,就重写一次,要让程序知道该听谁的话)
* 6.一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。(Java中继承大于接口)
* */
public class Demo01Interface {
public static void main(String[] args) {
MyInterfaceABImpl myInterfaceAB = new MyInterfaceABImpl();
myInterfaceAB.methodA();
myInterfaceAB.methodB();
myInterfaceAB.methodAbs();//重写一次即可
myInterfaceAB.methodDefault();
}
}
MyInterfaceA.java
package InterfaceandExtend;
public interface MyInterfaceA {
public abstract void methodA();
public abstract void methodAbs();
public default void methodDefault() {
System.out.println("接口A中的默认方法");
}
}
MyInterfaceB.java
package InterfaceandExtend;
public interface MyInterfaceB {
public abstract void methodB();
public abstract void methodAbs();
//public abstract void methodElse();
public default void methodDefault(){
System.out.println("接口B中默认方法");
}
}
MyInterfaceABImpl.java
package InterfaceandExtend;
public class MyInterfaceABImpl implements MyInterfaceA,MyInterfaceB{
@Override
public void methodA() {
System.out.println("重写A");
}
@Override
public void methodAbs() {
System.out.println("重写Abs");
}
@Override
public void methodB() {
System.out.println("重写B");
}
@Override
public void methodDefault() {
MyInterfaceA.super.methodDefault();
//两个中都有,只需要覆盖重写一个,必须要,不然不知道听哪个的话
System.out.println("对多个接口当中冲突的默认方法进行了覆盖重写");
}
}
对于第六条:
一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方
Fu.java
package InterfaceandExtend.FuZiInterface;
public class Fu {
public void method(){
System.out.println("父类的方法");
}
}
Zi.java
package InterfaceandExtend.FuZiInterface;
public class Zi extends Fu implements MyInterface{
}
MyInterface.java
package InterfaceandExtend.FuZiInterface;
public interface MyInterface {
public default void method(){
System.out.println("接口的默认方法");
}
}
Zi.java
package InterfaceandExtend.FuZiInterface;
public class main {
public static void main(String[] args) {
Zi zi = new Zi();
zi.method();
}
}
//输出结果
//父类的方法