它是更多鈔票有:在它之前提供一個抽象版本的方法定義?
public abstract void someMethod();
...
public void someMethod() {
// ...
}
在同一個班
?或者定義是否必須在子類中?
它是更多鈔票有:在它之前提供一個抽象版本的方法定義?
public abstract void someMethod();
...
public void someMethod() {
// ...
}
在同一個班
?或者定義是否必須在子類中?
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:
當抽象類被子類化時,子類通常爲其父類中的所有抽象方法提供實現。 但是,如果沒有,子類也必須聲明爲抽象。
您可以在類中定義,但不能實例化該類,只有子類。
謝謝!我想知道爲什麼Eclipse不會給我錯誤。 – Bob 2013-05-14 17:39:39
您的示例不完整,因爲您實際上沒有課程 – Devolus 2013-05-14 17:40:22
在同一課程中這是不可能的。編譯器會給你一個重複的方法錯誤 – NullPointerException 2013-05-14 17:43:13
如果你想迫使子類來實現的東西,那麼你應該做這樣的事情:
public abstract void someMethodHelper();
public final void someMethod()
{
//Stuff
someMethodHelper();
}
否則,Java有默認情況下所有的方法爲虛擬(覆寫投放)。
@dlev你是對的,錯過了......固定 – 2013-05-14 17:42:07
總之,是的定義必須在兒童類。但是,這引出了一個問題:如果您打算在父類中實現它,爲什麼還要使用抽象方法?我不太確定你綁在這裏做什麼,但這裏是一個一般原則:
如果父有行爲的方法,只要使用普通的方法(無需抽象)。該方法仍然可以被覆蓋爲子類。
如果超類沒有該方法的行爲,則將其設爲抽象。所有非抽象的子類都將被迫用非抽象的子類重寫此方法。
如果在類中放置抽象方法,它是一個抽象類,並且無法創建該類型的對象(因爲它們具有不完整的行爲)。
希望這會有所幫助。
爲什麼當你在同一個類中定義方法時,你需要抽象方法。 – ram2013 2013-05-14 17:39:28
在Java中這樣做沒有意義,因爲在聲明之前使用方法沒有問題。 – 2013-05-14 17:39:55