在Java中通过继承类实现接口

4

我有一个接口Car

public interface Car {
    void run();
}

我还有一个实现了该接口的基类:

public class Base implements Car {
    @Override
    public void run() {
        //some implementation here
    }
}

我还有一个类必须实现Car接口,那么为什么我不能像这样做呢?
public class Der extends Base implements Car  {
   //no implementation of interface here because Base class already implements it
}

为什么我的基类不能实现接口?这其中的内部原因是什么?


2
这是“implements”,而不是“implement”。而且“extends”必须放在“implements”之前。所以:public class Der extends Base implements Car - MrBackend
“extends” 必须在 “implements” 之前,例如 public class Der extends Base implements Car {,但已经指出,这与使用 public class Der extends Base { 相同。 - MadProgrammer
你的Base类正在实现接口Car - Peter Lawrey
7个回答

4
当从Base扩展时,你的Der当然会有run方法,因为它实现了Car。所以
public class Der extends Base {

}

足够

如果您需要覆盖run,您可以轻松地实现。代码如下所示:

public class Der extends Base {

   @Override
   public void run() {
      //do whatever here
   }
}

如果您需要在任何使用 Car 的地方使用 Der,当然可以这样做。

最后,如果您需要让 Car 实现其他接口,则语法应该是

public class Der extends Base implements SomeInterface{

}

1
如果您的基类已经实现了Car接口,并且这个基类被Der类继承,那么在Der类中就不需要再次实现Car接口。
例如:
Class Base implements Car{

}

然后

Class Der extends Base{

}

然后接口中的所有方法会隐式地访问您的Der类。

1
public class Der implements Car extends Base {
   //no implementation of interface here because Base class already implements it
}

你必须在实现关键字之前使用扩展关键字

正确写法:

public class Der extends Base implements Car {
       //no implementation of interface here because Base class already implements it
    }

0

实现关键字应该在您的示例中在扩展关键字之后,如下所示:

    public class Der extends Base implements Car  {
          //no implementation of interface here because
          // Base class already implements it
    }

如果您在一个类中执行extends和implements,甚至扩展已经实现了相同接口(即Car)的类,例如Base,则不会出现任何问题。


0

基类(Der的超类)已经实现了Car接口,因此不需要显式地实现它。


0

当扩展Base时,您的Der类将可以访问run方法,并且实际上可以被视为Car类型

例如:

Car a = new Der(); 

这将是完全有效的。


0

这就是为什么Java中没有多重继承的原因。

如果您提供了run方法的实现,那么如何处理Base Class的重写方法呢?

因此,为了避免冗余,不允许多重继承。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接