2013-05-14 21 views
0

它是更多鈔票有:在它之前提供一個抽象版本的方法定義?

public abstract void someMethod(); 
... 
public void someMethod() { 
    // ... 
} 
在同一個班

?或者定義是否必須在子類中?

+0

爲什麼當你在同一個類中定義方法時,你需要抽象方法。 – ram2013 2013-05-14 17:39:28

+0

在Java中這樣做沒有意義,因爲在聲明之前使用方法沒有問題。 – 2013-05-14 17:39:55

回答

6
public abstract void someMethod(); 

public void someMethod() { 
    // ... 
} 

在同一個類,也就是說重複方法定義。不可能。方法是基於方法簽名分化,而不是基於改性劑像abstract。從官方Java tutorial

方法聲明的組成部分包括兩個方法簽名,方法名和參數types.The Java編程語言支持重載方法,Java可以區分具有不同方法簽名的方法。

問:

Or does the definition have to be in the child classes? 

可以是一個子類,但在hierarchy.So它必須具體子類,第一個非抽象子類應提供實施抽象方法。再次,從Java tutorial

當抽象類被子類化時,子類通常爲其父類中的所有抽象方法提供實現。 但是,如果沒有,子類也必須聲明爲抽象。

1

您可以在類中定義,但不能實例化該類,只有子類。

+0

謝謝!我想知道爲什麼Eclipse不會給我錯誤。 – Bob 2013-05-14 17:39:39

+0

您的示例不完整,因爲您實際上沒有課程 – Devolus 2013-05-14 17:40:22

+0

在同一課程中這是不可能的。編譯器會給你一個重複的方法錯誤 – NullPointerException 2013-05-14 17:43:13

0

如果你想迫使子類來實現的東西,那麼你應該做這樣的事情:

public abstract void someMethodHelper(); 

public final void someMethod() 
{ 
    //Stuff 
    someMethodHelper(); 
} 

否則,Java有默認情況下所有的方法爲虛擬(覆寫投放)。

+0

@dlev你是對的,錯過了......固定 – 2013-05-14 17:42:07

0

總之,是的定義必須在兒童類。但是,這引出了一個問題:如果您打算在父類中實現它,爲什麼還要使用抽象方法?我不太確定你綁在這裏做什麼,但這裏是一個一般原則:

  • 如果父有行爲的方法,只要使用普通的方法(無需抽象)。該方法仍然可以被覆蓋爲子類。

  • 如果超類沒有該方法的行爲,則將其設爲抽象。所有非抽象的子類都將被迫用非抽象的子類重寫此方法。

  • 如果在類中放置抽象方法,它是一個抽象類,並且無法創建該類型的對象(因爲它們具有不完整的行爲)。

希望這會有所幫助。

相關問題