Vererbung Methodenaufruf funktioniert aber Wertzuweisung von Variablen nicht

phraid

Mitglied
Hallo zusammen,

ich habe ein Problem bezüglich Vererbung. Ich habe relativ viel Code deswegen versuch ich das ganze etwas abstrahiert darzustellen. Ich habe 3 Klassen A,B,C die jeweils voneinander erben also C erbt von B und B erbt von A sprich A->B->C.
In der Klasse B habe ich jeweils protected Variablen angelegt die bestimmte Werte innerhalb einer Methode von Klasse B zugewiesen bekommen. In der Klasse C ruf ich im Konstruktor über super() den Konstruktor von Klasse B auf. Der Aufruf funktioniert auch soweit allerdings kommt dann das Problem: Die Variablen die in Klasse B definiert sind bekommen keine Werte zugewiesen. Also irgendwie wird mein Algorithmus der in einer Methode der Klasse B definiert ist gestartet allerdings bekommen die Variablen aus B keine Wertzuweisungen, sodass ich von der Klasse C drauf zugreifen kann.

mfG
 
poste doch einfach Code, damit man nicht Rätselraten muss,

ein Standardfehler bei sowas, der hier aber nicht der Fall zu sein scheint:
Klasse C überschreibt eine Basisklasse-Methode, die durch Aufruf in einem Basisklasse-Konstruktor aktiviert wird,
und in der Klasse C dann auf Instanzattribute zugreift, die noch nicht gesetzt sind, weil der Klasse C-Konstruktor das machen soll
und noch nicht dran war, schließlich erfolgt der Aufruf gerade aus einem Konstruktor der Basisklasse
 
Das ganze sieht in etwa so aus

Code:
Class A extends Serializable {
    public A(){
        super();
    }
}


Class B extends A{
    public B(){
        super();
    }

   public void solve(){
       conduct();
   }

   protected abstract void conduct(){
   }
}


Class C extends B {

    protected int v1 = 0;
    protected int v2 = 0;
    ...

    public C(){
        super();
    }

    protected void conduct(){
        v1 = 1;
        v2 = 2;
        ...
    }
}


Class D extends C {
    public D(){
        super();
        init();
   }

   public void init(){
       if(v1 > 0)...              // Hier ist das Problem, v1 ist immer 0
   }
}

mfG
 
solve() auch nicht und dieser Satz
> In der Klasse B habe ich jeweils protected Variablen angelegt die bestimmte Werte innerhalb einer Methode von Klasse B zugewiesen bekommen.
kann ja nur eine glatte Lüge sein bei Code ohne Variablen in B 😉
 
Achso, ich vergas zu erwähnen, dass in einer Evaluierungsklasse die solve()-Methode aufgerufen wird.

Code:
Class Eval{

    public static void main(){

        B test = new D();
        test.solve();
    }
}
 
solve() auch nicht und dieser Satz
> In der Klasse B habe ich jeweils protected Variablen angelegt die bestimmte Werte innerhalb einer Methode von Klasse B zugewiesen bekommen.
kann ja nur eine glatte Lüge sein bei Code ohne Variablen in B 😉

Wie gesagt, solve() wird in einer Evaluierungsklasse aufgerufen. Die A,B,Cs aus dem Erstellungspost passen nicht mehr ganz auf den Code da ich das ganze jetzt detaillierter gemacht habe.

mfG
 
Eine -able-Klasse erweitert man übrigens nicht, sondern implementiert sie (ginge auch, aber ich glaub nicht, dass du das brauchst). Wie auch immer: eine abstrakte Methode wie du sie in Klasse B definierst hat keinen Methodenrumpf, auch keinen leeren, das sollte eigtl. einen Compilerfehler geben. Mach die geschweiften Klammern da weg und stattdessen ein Semikolon hin.

EDIT: Deine angeblich protected Variablen in B haste aber immer noch nicht beschrieben.
 
D statt C nun,
Java:
protected abstract void conduct(){
   }
kann man gar nicht programmieren, von großgeschriebenen Klassen ganz zu schweigen,

wie soll da jemand durchsehen?
poste ein komplettes Code-Beispiel, auch inklusive Code wie Ausgaben zur Prüfung des Ergebnis,
was auch immer das genau ist (welche Variable hat welchen falschen Wert und soll welchen anderen haben?)

> EDIT: Deine angeblich protected Variablen in B haste aber immer noch nicht beschrieben.
vielleicht ja C, in B selber wird bestimmt nur solve() aufgerufen, das ist genug Beitrag
 
Das Problem hat sich erledigt. Das Problem war dass auf bestimmte Variablen zugegriffen worden ist, bevor der Algorithmus sie überhaupt setzen konnte. Danke für die Hilfe.

mfG
 

Zurück
Oben