java继承父类并实现多个接口
使用接口的时候,需要注意:
接口是没有静态代码块或者构造方法的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package cn.itcast.day10.demo02;
public interface MyInterfaceA {
}
|
一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
格式:
1 2 3
| public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB { }
|
如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package cn.itcast.day10.demo02;
public abstract class MyInterfaceAbstract implements MyInterfaceA, MyInterfaceB { @Override public void methodA() {
} @Override public void methodAbs() {
}
@Override public void methodDefault() {
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package cn.itcast.day10.demo02;
public interface MyInterfaceB {
public abstract void methodB();
public abstract void methodAbs();
public default void methodDefault() { System.out.println("默认方法BBB"); }
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package cn.itcast.day10.demo02;
public interface MyInterfaceA {
public abstract void methodA();
public abstract void methodAbs();
public default void methodDefault() { System.out.println("默认方法AAA"); }
}
|
如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
1 2 3 4 5
| package cn.itcast.day10.demo02;
public abstract class MyInterfaceAbstract implements MyInterfaceA, MyInterfaceB { }
|
如果实现类锁实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
1 2 3 4 5 6 7 8 9 10
| package cn.itcast.day10.demo02;
public interface MyInterfaceA {
public default void methodDefault() { System.out.println("默认方法AAA"); }
}
|
1 2 3 4 5 6 7 8 9 10
| package cn.itcast.day10.demo02;
public interface MyInterfaceB {
public default void methodDefault() { System.out.println("默认方法BBB"); }
}
|
1 2 3 4 5 6 7 8 9 10 11
| package cn.itcast.day10.demo02;
public abstract class MyInterfaceAbstract implements MyInterfaceA, MyInterfaceB { @Override public void methodDefault() {
}
}
|
一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。
1 2 3 4 5 6 7 8 9
| package cn.itcast.day10.demo02;
public interface MyInterface {
public default void method() { System.out.println("接口的默认方法"); }
}
|
1 2 3 4 5 6 7 8 9
| package cn.itcast.day10.demo02;
public class Fu {
public void method() { System.out.println("父类方法"); }
}
|
1 2 3 4
| package cn.itcast.day10.demo02;
public class Zi extends Fu implements MyInterface { }
|
1 2 3 4 5 6 7 8 9 10 11 12
| package cn.itcast.day10.demo02;
public class Demo01Interface {
public static void main(String[] args) { Zi zi = new Zi(); zi.method(); }
}
|