簡體   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