繁体   English   中英

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

[英]Why can't an abstract class extend an interface?

我只是想知道为什么abstract类不能扩展interface

由于我们无法实例化abstract类,因此我不能只扩展接口然后在扩展抽象类的类中重写那些方法吗?

例如

abstract class AbstractClass extends InterfaceA 
{

}

interface InterfaceA
{
   public void methodToBeImplemented();
}

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

因为您不extends 接口 ,所以可以implements它。

interface InterfaceA
{
   public void methodToBeImplemented();
}

abstract class AbstractClass implements InterfaceA 
{

}

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

就像其他类一样,抽象类仍然是一个类。 只有接口可以extends其他接口。

您实际上可以使用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的哲学以及类和接口的使用方式。 假设您有以下课程:学生,教授,员工,技术人员。 以及以下界面:人口统计,详细信息和个人详细信息。

理想情况下,班级教授和技术人员都可以从班级雇员那里扩展出来,这很有意义。 但是,请想象从人口统计学或Personaldetails扩展类技术人员。 这没有道理。 就像从蓝色课堂扩展课堂天空一样。 仅因为您可以做并不意味着您应该做。 但是,让班级技术人员从员工中扩展并实现诸如Paydetails或人口统计学之类的接口更有意义。 就像从大自然中延伸出天空,但实现了蓝色的界面(赋予它蓝色的功能)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM