2016-04-13 20 views
1

我正在學習C++,並一直在嘗試實踐面向對象的編程。我使用的很多參考文獻都是以Java教程的形式出現的。'界面'是Java中'抽象'的有限版本嗎?

我注意到的一件事是在Java中有'抽象類'和'接口'的概念。我很困惑,爲什麼會有兩個。看起來你可以用一個接口完成的任何事情都可以用一個抽象類來完成。

所以我的問題:界面是否提供了Java中的其他功能?或者它只是一種指定抽象類不應允許繼承類實現其自己的方法/數據成員的方法?

+5

你的類可以實現**多**接口。所以,接口提供** type **的多重繼承。 –

+0

如上所述,您可以實現多個接口。它們用於保存方法簽名,常量字段,默認方法等。有關默認方法的很酷的事情是,如果需要,可以在使用'default'關鍵字指定的方法內添加實現。 – Logan

回答

1

Java不允許多重繼承。這意味着一個單獨的子類不能有多個父類。但是,一個類可以「實現」多個接口。這可以讓你實現多重繼承。

在Java版本1.8之前,抽象類和接口之間的主要區別在於,不能在接口中定義方法,但可以在抽象類中實現。但是Java 8允許在接口本身中實現「默認」和「靜態」方法。

至於你的問題,如果你繼承了抽象類,那麼Java將迫使你在子類中實現父類的抽象方法將子類聲明爲抽象本身。所以如果一個子類繼承了一個抽象類,那麼這個子類可以自由地聲明和定義它自己的方法和數據成員。它也可以重寫父抽象類的方法。

接口和抽象類的使用取決於您的需求。但總的來說,最好使用接口。

0

是的,Interface是一種特殊的ABC。但爲什麼java區分對方? 我的理解是,

  • ABC的重點類常用詞彙
  • 接口側重於實例具有

共同的特點,我相信這是一個對象可以繼承多個接口,但不能有原因多個超類。

0

好的。在面向對象抽象是一個主要概念,你在一個編程環境中模擬真實世界的事物,只考慮對你很重要的事實。例如,如果你創建一個Person類,你真正需要的是這個人的姓名,生日,地址和一些類似的東西。這是抽象的基本思想。

爲什麼有兩種實現抽象的方法是Java,Abstract Classes和Interfaces。在這種情況下,請考慮類似Bird類。如果你說要展示一隻鳥,你實際展示的是一隻鸚鵡或任何其他特定類型的鳥。雖然我們將它們稱爲鳥類,但除了收集不同類型的鳥類之外,沒有任何稱作鳥類的確切東西。在這種情況下是一個抽象的實體。也就是說,鳥太抽象,不能在現實世界中顯示。因此,鳥是一個抽象類。

當涉及到的接口,假設有一個名爲IEAT具有方法的接口。如果我們有狗,貓和鸚鵡實施這個接口,他們都吃一般。但他們吃的方式是特定於班級的。因此,當您需要類之間的共同行爲時使用接口,但實現取決於它正在實現的類。

另外,像一個類可以實現多個接口一樣,但是隻有一個抽象類可以被一個類擴展。但主要的想法是。基本上,由於設計原因,抽象類和接口有兩種方法。

0

從字面上看,抽象類是一種類,可以繼承。抽象類可以包含特定的方法。但Java中不允許多重繼承,即一個類不能繼承兩個類或類。 但是,接口不是類,而是類的外觀,只是描述類如何行爲,所以y不能實例化一個接口。但是一個類可以實現多個接口。

總之

  • 抽象類是抽象的整個類(屬性和行爲)的,接口是抽象局部類(僅行爲)

  • 抽象類及其亞類之間的關係是「是 - 一個「,他們是相似的類。接口與其實現類之間的關係並不是特定的關係。

  • 在設計層面,抽象的設計模式是從下到上,即在設計抽象類之前必須先了解子類。但是,在設計界面之前,我們不需要知道任何類的東西。

0

實現接口意味着增加能力上您的課。 抽象類未實現 - 不完整類

//whoever extends this has to be some kind of Toy 
    abstract class Toy 
    { 
     public void play(){ 
      //do some play 
     } 
    } 

    //whoever implements this will be able to Fly 
    interface Flyable 
    { 
     public void fly(); 
    } 

    BirdToy extends Toy implements Flyable 
    { 

    } 

    Vehicle1Toy extends Toy 
    { 
     //like Truck 
    } 

    Vehicle2Toy extends Toy implements Flyable 
    { 
     //like helicopter 
    } 

    class Person implements Flyable 
    { 
     //like superman 
    }