2010-11-17 57 views
42

我必須創建很多非常相似的類,它們之間只有一種方法不同。所以我認爲創建抽象類將是實現這一目標的好方法。但是我想重寫的方法(比如foo()方法)沒有默認行爲。我不想保留任何默認實現,強制所有擴展類實現此方法。我該怎麼做呢?如何強制在java中重寫方法?

+0

聽起來像模板方法模式的實現http://en.wikipedia.org/wiki/Template_method_pattern – Robin 2010-11-17 14:42:26

+1

這是一個很好的問題,你希望所有的子類調用他們的父母。迄今爲止的答案似乎沒有考慮到這種情況。例子:確保一個方法需要在每個類中重寫並調用父類:'@override protected void importantMethod(){super.importantMethod(); ...}' – will 2016-09-27 01:46:32

回答

69

你在你的基類需要一個抽象方法:

public abstract class BaseClass { 
    public abstract void foo(); 
} 

這樣,你不指定一個默認行爲您強制非抽象類從BaseClass繼承指定的實現爲foo

+9

你的基類'BaseClass' **必須是抽象的。 – 2010-11-17 11:43:22

+0

@精英紳士:是的!謝謝!固定的。 – 2010-11-17 11:43:52

+3

啊對!我有一種誤解,認爲抽象類canot具有非抽象方法。謝謝! – 2010-11-17 11:51:02

9

只是使方法抽象。

這將強制所有的子類實現它,即使它是在抽象類的超類中實現的。

public abstract void foo(); 
+0

感謝您提到超類場景 – 2016-02-03 09:12:50

4

使該方法成爲abstract

5

如果你有一個抽象類,然後讓你的方法(假設foo抽象的爲好)

public abstract void foo(); 

那麼所有子類必須覆蓋foo