我有一个例子来说明为什么在类声明中扩展先于实现,
内表面 :
public interface IParent {
void getName();
void getAddress();
void getMobileNumber();
}
抽象类 :
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() {
//To change body of implemented methods use File | Settings | File Templates.
}
}
如果您观察到接口和抽象类中都有相同的方法getName(),而在抽象类中,方法具有实现。
当你尝试实现时,一个类必须重写接口的所有抽象方法,然后我们尝试扩展已经具有方法getName()实现的抽象类。
当您创建子类的实例并将方法 getName() 称为
Child child = new Child();
child.getName();
子级调用哪个方法实现时将存在冲突,因为同一方法 getName() 将有两个实现。
为了避免这种冲突,他们强制要求先扩展,然后再实现接口。
因此,如果抽象类具有与接口中相同的方法,并且如果抽象类已经实现了该方法,则对于子类,则无需重写该方法