2013-11-15 29 views
1

我有一個接口稱爲Worker這是我要揭露,使最終用戶可以直接電話諮詢:防止從重寫某些方法抽象實現

Worker w = WorkerFactory.createInstance(); 
w.mainBit(); 

如何防止從提供致以AbstractWorker類的類自己執行mainBit方法?

這是我迄今爲止的結構:

interface Worker { 
    void mainBit(); 
} 

class WorkerFactory { 
    public static Worker createInstance() { 
     return new WorkerImpl(); 
    } 
} 

abstract class AbstractWorker implements Worker { 
    @Override 
    public void mainBit() { 
     this.doThing1(); 
     this.doThing2(); 
    } 

    public abstract void doThing1(); 
    public abstract void doThing2(); 
} 

class WorkerImpl extends AbstractWorker { 
    @Override 
    public void doThing1() { 

    } 

    @Override 
    public void doThing2() { 

    } 

    @Override 
    public void mainBit() { 
     // I don't want classes to override this functionality 
    } 
} 

回答

4

你可以做到這一點使得該方法final

+0

不知道你也可以使方法最終。萬分感謝! – CodingIntrigue

3

使用final關鍵字。

public final void mainbit() 
... 
2

如果您想要始終使用AbstractWorker的mainBit,請在此類中進行最終確定。這樣子類就不會覆蓋它。

2

標記方法final,防止壓倒一切:

public final void mainBit() 
1

馬克它final你抽象類中(在Java中)。沒有其他的子類將被允許覆蓋它。