2013-11-15 30 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中)。没有其他的子类将被允许覆盖它。