我有一个例子可以解释为什么在类声明中extends优先于implements。
接口:
public interface IParent {
void getName();
void getAddress();
void getMobileNumber();
}
abstract class :
public abstract class Parent {
public abstract void getAge();
public void getName(){
System.out.print("the parent name");
}
}
子类:
public class Child extends Parent implements IParent {
@Override
public void getAddress() {
System.out.print(" Child class overrides the Parent class getAddress()");
}
@Override
public void getMobileNumber() {
System.out.print(" Child class overrides the Parent class getMobileNumber()");
}
@Override
public void getAge() {
}
}
如果您观察,您会发现接口和抽象类中都有同名的方法getName(),而在抽象类中该方法具有实现。
当您尝试实现时,一个类必须覆盖接口的所有抽象方法,然后我们正在尝试扩展已经具有方法getName()实现的抽象类。
当您创建Child类的实例并调用方法getName()时,
Child child = new Child();
child.getName();
当一个方法getName()存在两个实现时,对于子类来说会产生冲突。
为了避免这种冲突,必须先继承再实现接口。
如果抽象类和接口中都有相同的方法,而且抽象类已经实现了该方法,那么子类不需要覆盖该方法。