Rav*_*avi 17 java oop extends implements
interface Bouncable{ }
interface Colorable extends Bouncable{ }
class Super implements Colorable{ }
class Sub extends Super implements Colorable {} // Ok (case -1)
Run Code Online (Sandbox Code Playgroud)
但,
class Sub implements Colorable extends Super {} // error (case -2)
Run Code Online (Sandbox Code Playgroud)
为什么case-2显示编译错误{ expected.为什么?虽然,case-1执行没有错误.
yeg*_*256 35
extends应该去implements:
class Sub extends Super implements Colorable {}
Run Code Online (Sandbox Code Playgroud)
我有一个例子来说明为什么在类声明中扩展先于实现,
表面:
public interface IParent {
void getName();
void getAddress();
void getMobileNumber();
}
Run Code Online (Sandbox Code Playgroud)
抽象类:
public abstract class Parent {
public abstract void getAge();
public void getName(){
System.out.print("the parent name");
}
}
Run Code Online (Sandbox Code Playgroud)
儿童班:
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.
}
}
Run Code Online (Sandbox Code Playgroud)
如果观察到在接口和抽象类中都有相同的方法getName(),则在抽象类中该方法具有实现。
当您尝试实现时,一个类必须重写接口的所有抽象方法,然后我们尝试扩展已经为getName()方法实现的抽象类。
当您创建一个Child类的实例并将方法getName()称为
Child child = new Child();
child.getName();
Run Code Online (Sandbox Code Playgroud)
一个孩子调用哪个方法实现会发生冲突,因为同一个方法getName()将有两个实现。
为了避免这种冲突,他们必须先进行扩展,然后再实现接口。
因此,如果抽象类具有与接口相同的方法,并且抽象类已经实现了该方法,则对于子类而言,不必重写该方法