2013-02-16 3 views
0

Я хочу, чтобы создать решение для следующей задачи без особых избыточности:Статический параметр с различными значениями в подклассах

У меня есть абстрактный класс Unit, подклассы SubUnit1 и SubUnit2. Все Unit s имеют maxValue, который отличается от SubUnit1 до SubUnit2, но должен быть одинаковым для всех экземпляров одного и того же модуля в любое время.

Я не хочу копировать все сеттеры, геттеры или какой-то метод вокруг этих значений, потому что они одинаковы для всех подклассов. Я также не хочу использовать обычные параметры и передавать методы в подклассы и обновлять каждый отдельный экземпляр этих подклассов, если это необходимо. И каким-то образом получить текущее значение, когда я создаю новый экземпляр.

Есть ли способ объявить какой-то статический параметр и методы в родительском классе Unit, которые различаются в разных подклассах?

+0

Нет, вам необходимо переопределить метод getter в каждом классе, который возвращает правильное значение –

ответ

1

Вы можете определить защищенный конструктор родительского класса, который принимает значение MAXVALUE

public abstract class Unit { 
    private final int maximum; 

    protected Unit(int maximum) { 
     this.maximum = maximum; 
    } 

    public int getMaximum() { 
     return maximum; 
    } 
} 

Тогда в ваших производных классов вы подвергаете конструкторы, которые вызывают конструктор родительского при фиксированном значении, уникальный для каждого подкласса.

public class SubUnit1 { 
    private static final int SUBUNIT1_MAX = 10; 

    public SubUnit1() { 
     super(SUBUNIT1_MAX); 
    } 
} 
0

Нет, но с использованием interface вы можете указать, что UNIT должен иметь MAXVALUE.

public interface IUnit 
{ 
    public int getMaxValue(); 
} 

public class SubUnit implements IUnit 
{ 
    private static final int MAX_VALUE = 48; 

    @Override 
    public int getMaxValue() { 
     return MAX_VALUE; 
    } 
} 
Смежные вопросы