2012-10-20 4 views
10

Ich habe eine abstrakte Klasse, wo ich letzte Variablen deklarieren möchten. in der Konstrukteurs meiner UnterklassenWie Konstanten/Abschluss Variablen in der abstrakten Oberklassen definieren, sondern sie in der Unterklasse zuordnen?

Ich möchte jedoch nur die Werte dieser Variablen zugewiesen werden soll.

Offenbar ist dies nicht möglich, weil alle „final Felder initialisiert werden müssen“. Ich verstehe nicht warum, denn es ist sowieso nicht möglich, eine abstrakte Klasse zu instantiieren.

Was Ich mag würde, ist so etwas haben:

abstract class BaseClass { 
    protected final int a; 
} 

class SubClass extends BaseClass { 
    public SubClass() { 
     a = 6; 
    } 
} 

ich etwas Ähnliches wie Methoden vorstellen, wenn Sie eine Schnittstelle implementieren. Dann sind Sie auch gezwungen, die Methoden in der (Unter-) Klasse zu implementieren.

+0

Wie man "a" in einer konkreten Unterklasse einstellt, während es "final" bleibt. – Jack

+0

wenn Sie setzen ein als endgültig, warum Sie eine übergeordnete Klasse müssen sie enthalten? Sie können es nicht einfach in der Unterklasse definieren? – Gianmarco

Antwort

16

Sie sollten einen Konstruktor in Ihrer abstrakten Klasse definieren, die einen Wert für a und rufen Sie diesen Konstruktor von Ihrer Unterklasse nimmt. Auf diese Weise stellen Sie sicher, dass Ihr endgültiges Attribut immer initialisiert wird.

abstract class BaseClass { 
    protected final int a; 

    protected BaseClass(int a) 
    { 
     this.a = a; 
    } 
} 

class SubClass extends BaseClass { 
    public SubClass() { 
     super(6); 
    } 
} 
+0

Vielen Dank, Problem gelöst! – schrobe

Verwandte Themen