6.0、Java继承与多态 - 接口与继承
使用接口的时候,需要注意:
1.接口是没有静态代码块或者构造方法的(毕竟成员变量都是常量);
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口;格式如下所示 ->
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB {
//覆盖重写所有抽象方法
}
3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可;
4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类;
5.如果实现类所实现的多个接口中,存在重复的默认方法,那么无论你的实现类是不是抽象类都必须要对冲突的默认方法进行覆盖重写;
6.如果一个实现类的直接父类中的方法和接口中的默认方法产生冲突,那么默认优先使用父类中的方法;[ 在Java中 继承 优先于 接口 ]
在 Java 中:
1.类与类之间的关系是单继承的 -> 也就是说一个类的直接父类只能有一个;
2.类与接口之间的关系是可以多实现的 -> 也就是说一个类可以实现多个接口;
3.接口与接口之间的关系是可以多继承的 -> 也就是说一个接口可以继承多个接口;
这里主要给大家解释一下第三点,因为在我们的初步认知中 - Java是没有多继承的;但是接口例外 -> 下面给大家举个例子 ->
第一步:创建接口 MyInterface1 文件如下所示 ->
public interface MyInterface1 {
void add();
void commonMethod();
}
第二步:创建接口 MyInterface2 文件如下所示 ->
public interface MyInterface2 {
void delete();
void commonMethod();
}
第三步:创建接口 MyInterface3 并让他同时继承 MyInterface1 和 MyInterface2,文件如下所示 ->
public interface MyInterface3 extends MyInterface1,MyInterface2 {
void query();
}
第四步:创建实现类 MyInterfaceImpl 文件如下所示->
public class MyInterfaceImpl implements MyInterface3 {
@Override
public void add() {
}
@Override
public void delete() {
}
@Override
public void commonMethod() {
}
@Override
public void query() {
}
}
可以看到在 接口1 和 接口2 中有一个同名的方法 commonMethod( ) ,但是我们实现的时候只需要重写一次即可( 因为他们都是抽象方法所以没关系,但是如果父类接口中的默认方法有重复,就必须要在子类接口中将其重写才可以也是必须要带有 default 关键字的 );也能看到我们的实现类重写了 接口1、接口2、接口3 中的所有方法,由此可知接口与接口之间可以实现多继承的关系;