2016-01-29 55 views
1

我只是碰到兩種截然不同的意見就來了抽象抽象類和方法|歧義意見

1)一個人說,抽象方法不能在具體的(普通)類使用;而抽象類可以同時具有抽象/非抽象方法

2)雖然在YouTube上高度關注的教程說「任何具有抽象方法的類都會讓它的類自動定義爲摘要

第二點與第一點完全相反;在實施它的同時,我只在第一個概念上取得了成功,而不是第二個。但是,如果任何人都能夠耐心地幫助我,我仍然希望在這方面有一個詳細的清晰。

+0

*「第2點與第1點完全相反」*不是。第二個「觀點」只是試圖說,具有抽象方法的類是「自動」抽象類(但是,您需要手動將'abstract'寫入類標題)。第二部分(在括號內)只是缺失。 – Tom

+0

「抽象方法不能用於具體(普通)類」似乎不正確。我可以從引用中調用任何允許我這樣做的方法,並且這裏僅限於方法訪問器(private ... public)。方法體將來自實際實例(並且抽象類不能被實例化),所以我在這裏看不到問題,或者我誤解了作者想說的東西。也許從閱讀由非常聰明的人創建的官方教程開始,而不是從隨機人員創建的YouTube頻道學習。 – Pshemo

+1

@peter *「並且至少有一個抽象方法」*這是錯誤的。抽象類不需要單個抽象方法。 – Tom

回答

1

official Java tutorial所述,「如果一個類包含抽象方法,那麼該類本身必須聲明爲抽象的」。它不會自動變得抽象;它需要明確標記爲抽象。

0

任何包含抽象方法的類都不能實例化,因爲它包含未定義的方法。任何時候創建類的對象時,都必須包含該類的所有內容,並且必須全部定義。

所以你需要聲明這個類是抽象的,這意味着這個類不能被實例化。但僅僅因爲一個類是抽象的,並不代表它必須只實現抽象方法。例如,您可以在抽象類中使用靜態方法,因爲調用靜態方法屬於該類的而不是對象實例

0

抽象類可以有方法摘要和非抽象。對於爲例,

public abstract class Employee { 
    ... 

    //this method would be implemented in those classes that extends from Employee. 
    public abstract void calculateSalary(); 

    public Employee addEmployee() { 
     //Method body 
    } 

但是,如果你在一個非抽象類這必須自身轉化爲抽象上午宣佈一個抽象方法。

另一方面,抽象方法將在抽象父類的繼承類中實現。所以你會在一個泛型類中執行這個實現。

我希望這會有所幫助。