2013-11-15 3 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

Если вы хотите всегда использовать mainBit AbstractWorker, сделайте его окончательным в этом классе. Таким образом, подклассы не будут переопределять его.

2

Марк метод, как final, который предотвращает наиважнейшая:

public final void mainBit() 
1

Отмечать final внутри вас абстрактный класс (в Java). Никакой другой подкласс не будет разрешен для его переопределения.

Смежные вопросы