为什么抽象类不能扩展接口?

Pra*_*tta 7 java extends interface abstract

我只是想知道为什么abstract课程不能扩展interface.

既然我们不能实例化一个abstract类,我不能只扩展接口然后覆盖扩展抽象类的类中的那些方法吗?

例如

abstract class AbstractClass extends InterfaceA 
{

}

interface InterfaceA
{
   public void methodToBeImplemented();
}

class MyClass extends AbstractClass
{
  @Override
  public void methodToBeImplemented(){
      //do something
  }
}  
Run Code Online (Sandbox Code Playgroud)

Qix*_*Qix 16

因为你不是extends一个界面 - 你implements呢.

interface InterfaceA
{
   public void methodToBeImplemented();
}

abstract class AbstractClass implements InterfaceA 
{

}

class MyClass extends AbstractClass
{
  @Override
  public void methodToBeImplemented(){
      //do something
  }
}  
Run Code Online (Sandbox Code Playgroud)

抽象类仍然是一个类,就像任何其他类一样.只有接口才能有extends其他接口.

  • 我不是贬低者,但为什么你不一致?不应该是`implements`? (2认同)
  • @Qix当你写下"你实现它"时,我真的听到了大力水手说话 - 感谢大笑! (2认同)

Nic*_*ick 5

您实际上可以在Java中扩展接口,但它仍然可以称为接口.

然后,您可以使用抽象类中实现的此扩展接口.

interface InterfaceName
{
    public void foo();
}

public interface ExtendedInterface extends InterfaceName
{
    public void bar();
}

public class ClassName implements ExtendedInteface 
{
    //implementation for all methods in InterfaceName and ExtendedInteface
    ...
}
Run Code Online (Sandbox Code Playgroud)

Praveen,它就是设计师设计的方式.它可以追溯到Java的哲学以及类和接口的使用方式.假设您有以下课程:学生,教授,员工,技术员.以下界面:人口统计,Paydetails和Personaldetails.

理想情况下,班级教授和技术人员都可以从班级员工中进行扩展,这是有道理的.但是,想象从人口统计学或Personaldetails扩展类技术员.它没有意义.它就像从班级蓝色延伸班级天空一样.只是因为你可以做的并不意味着你应该这样做.但是,让一名技术人员从员工扩展并实现Paydetails或人口统计等界面更有意义.它就像从大自然延伸天空,但实现蓝色界面(赋予它蓝色的功能).

这是Java开发人员反对多重继承(与cpp不同)而不是使用接口的基本原因.在你的问题中,如果类是抽象的是无关紧要的.你简单地无法从界面扩展,因为它在逻辑上没有意义.

  • 也许一个例子会增强这个答案? (2认同)