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

时间:2014-08-09 00:30:40

标签: java interface abstract extends

我只是想知道为什么abstract课程不能延长interface

由于我们无法实例化abstract类,我是否可以扩展接口,然后覆盖扩展抽象类的类中的那些方法?

例如

abstract class AbstractClass extends InterfaceA 
{

}

interface InterfaceA
{
   public void methodToBeImplemented();
}

class MyClass extends AbstractClass
{
  @Override
  public void methodToBeImplemented(){
      //do something
  }
}  

3 个答案:

答案 0 :(得分:14)

因为你没有extends interface - 你implements

interface InterfaceA
{
   public void methodToBeImplemented();
}

abstract class AbstractClass implements InterfaceA 
{

}

class MyClass extends AbstractClass
{
  @Override
  public void methodToBeImplemented(){
      //do something
  }
}  

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

答案 1 :(得分: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
    ...
}

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

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

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

答案 2 :(得分:0)

接口中的

只扩展接口。当我们在类中使用接口时,它需要在类中实现。另一个是抽象类包含抽象和非抽象方法,而接口只包含抽象方法 这是定义inteface(子类)的实现。