扩展类并在java中实现接口

2022-09-01 05:00:55
interface Bouncable{ } 
interface Colorable extends Bouncable{ } 
class Super implements Colorable{ } 
class Sub extends Super implements Colorable {} // Ok (case -1)

class Sub implements Colorable extends Super {} // error (case -2)

为什么案例 2 显示编译错误 。为什么??虽然,案例 1 执行时没有错误。{ expected


答案 1

extends应该去之前:implements

class Sub extends Super implements Colorable {}

答案 2

我有一个例子来说明为什么在类声明中扩展先于实现,

内表面 :

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() 将有两个实现。

为了避免这种冲突,他们强制要求先扩展,然后再实现接口。

因此,如果抽象类具有与接口中相同的方法,并且如果抽象类已经实现了该方法,则对于子类,则无需重写该方法