отложить окончательное значение для подкласса Java - PullRequest
0 голосов
/ 03 августа 2011

У меня есть вопрос, похожий на В Java, почему я не могу объявить конечный член (без его инициализации) в родительском классе и установить его значение в подклассе?Как я могу обойти? , но требует другого решения.Как и в приведенном выше случае, я хочу объявить переменную как Final в суперклассе, но я хочу, чтобы подкласс дал ей значение.Однако моя проблема отличается тем, что я не хочу, чтобы значение передавалось подклассу, я хочу, чтобы подкласс «знал» его значение, поэтому приведенное выше решение не работает для меня.Затем я попытался сделать это:

public class Superclass{
    public final int x;
    public Superclass(int x){
        this.x = x;
    }
}
public class Subclass extends Superclass{
    public Subclass(){
        x = 1;
        super(x);
    }
}

... который не работал (вызов super () должен быть в первой строке: /).Но это в основном то поведение, которое я хочу.Есть ли хороший способ сделать это?Спасибо!

Ответы [ 3 ]

6 голосов
/ 03 августа 2011

Вы можете сделать

super(1);

, поэтому вместо установки x вы передаете значение.

1 голос
/ 03 августа 2011

Альтернатива вышеупомянутой:

class Superclass{
    public final int x;

    public Superclass(int x){
        this.x = x;
    }

    public static Superclass createNew(Integer y) {
        return new Superclass(y);
    }

    public void print() {
        System.out.println(this.x);
    }
}
class Subclass extends Superclass{
    public Subclass(int x) {
        super(process(x));
    }

    public static Integer process(Integer y) {
        if (y < 100)
            y += 100;
        return y;
    }
}
0 голосов
/ 03 августа 2011

У меня нет удобного компилятора Java, но вы пытаетесь установить x = 1 дважды в этом коде.

x = 1;

И

super(x); //==> this.x = x 

Делайте, как сказал @Kal, и выполняйте super (1), так как x = 1 не будет работать.

...