当实现类实现多个接口时,可能发生的几种冲突情况
1.共有 静态常量的冲突 --> 实现类不继承冲突的常量
2.公有 抽象方法的冲突 --> 实现类只需要重写一个即可
3.公有 默认方法的冲突 --> 实现类必须重写一次默认方法(必须)
4.公有 静态方法的冲突 --> 静态方法是直接属于接口的,不能被继承,所有不存在冲突
5.私有 方法的冲突 -->私有方法只能在本接口中直接使用,不存在冲突
1.公有静态常量的冲突
interface A{
int NUM1 = 10;
}
interface B{
int NUM2 = 20;
int NUM1 = 30;
}
class Impl implements A,B{}
public class Tests {
/*
* 公有静态常量的冲突,如果多个接口中有相同的常量,那么实现类就无法继承
* */
public static void main(String[] args) {
//System.out.println(Impl.NUM1); 编译报错
System.out.println(Impl.NUM2);
}
}
2.公有抽象方法的冲突
interface A{
void method();
}
interface B{
void method();
}
class Impl implements A,B{
@Override
public void method() {
}
}
public class Tests {
public static void main(String[] args) {
/*
* 公有抽象方法的冲突:实现类只需要重写一个,实现的即是A的也是B的
* */
}
}
3.公有默认方法的冲突:
interface A{
default void method(){
System.out.println("A接口的默认方法method");
}
}
interface B{
default void method1(){
System.out.println("B接口的默认方法method");
}
}
class Impl implements A,B{
@Override
public void method() {
System.out.println("实现类重写的默认方法");
}
}
public class Tests {
public static void main(String[] args) {
/*
* 公有默认方法的冲突:实现类必须重写一次最终版本
* 一个类可以实现多个接口,但是如果实现的多个接口中有重名的默认方法
* 就必须通过在实现类中重写默认方法
* */
Impl impl = new Impl();
impl.method();
}
}
4.公有静态方法冲突
interface A{
public static void method(){
System.out.println("接口A的静态方法method");
}
}
interface B{
public static void method(){
System.out.println("接口A的静态方法method");
}
}
class Impl implements A,B{
}
public class Tests {
/*
* 公有静态方法的冲突:静态方法是属于接口的,不能被继承,所有不存在冲突
* */
}