实现类继承父类有实现接口时的冲突:
1.公有静态常量的冲突:子接口无法继承有冲突的常量
2.公有抽象方法的冲突:子接口只会继承一个有冲突的抽象方法
3.公有默认方法的冲突:优先访问父类
4.公有静态方法的冲突:只会访问父类的静态方法
5.私有方法的冲突:不存在冲突
1.公有静态常量的冲突:
class Fu{
public static final int NUM1 = 10;
public static final int NUM2 = 20;
}
interface A{
public static final int NUM1 = 100;
}
class Zi extends Fu implements A{}
public class Tests {
/*
* 公有静态常量的冲突:子类无法继承有冲突的常量
*
* */
public static void main(String[] args) {
//System.out.println(Zi.NUM1); 编译报错
System.out.println(Zi.NUM2);
}
}
2.公有抽象方法的冲突:
abstract class Fu{
public abstract void method();
}
interface A{
public abstract void method();
}
class Zi extends Fu implements A{
@Override
public void method() {
System.out.println("Zi 重写有冲突的抽象方法");
}
}
public class Tests {
/*
* 公有抽象方法的冲突:子类必须重写一次有冲突的抽象方法
*
* */
public static void main(String[] args) {
Zi zi = new Zi();
zi.method();
}
}
3.公有默认方法的冲突:
abstract class Fu{
public void method(){
System.out.println("Fu 类中的默认方法method");
}
}
interface A{
public default void method(){
System.out.println("A 接口中的默认方法method");
}
}
class Zi extends Fu implements A{ }
public class Tests {
/*
* 公有默认方法:优先访问父类的
*
* */
public static void main(String[] args) {
Zi zi = new Zi();
zi.method(); //Fu 类中的默认方法method
}
}
4.公有静态方法的冲突:
abstract class Fu{
public static void method(){
System.out.println("Fu 类中的默认方法method");
}
}
interface A{
public static void method(){
System.out.println("A 接口中的默认方法method");
}
}
class Zi extends Fu implements A{ }
public class Tests {
/*
* 公有静态方法的冲突:只会访问父类的静态方法
*
* */
public static void main(String[] args) {
Zi.method(); // Fu 类中的静态方法method
}
}