扩展类并在java中实现接口

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)

  • 只是Java语法,没有逻辑 (8认同)
  • 有逻辑。如果有更多的接口需要实现,那么在一行的末尾找到超类就会变得更加困难。考虑一下:“Sub 类实现了 Colorable、Shape、Component、SomeInterface、AnotherInterface 扩展了 Super {}”。 (2认同)

rav*_*mar 5

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

表面:

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

为了避免这种冲突,他们必须先进行扩展,然后再实现接口。

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