Ich habe einen Zweifel mit einer versteckter Variablen. Wie soll man auf das i von der Klasse Base zugreifen?: mit ((Base)s).i; oder eher mit (Base)s.i;? Was ist der Unterschied zwischen den beiden?
Code:
class Base {
int i = 10;
}
class Sub extends Base {
int i = 20; // Das hier versteckst Bases i.
}
Sub s = new Sub();
int k = s.i; // Das hier weist 20 dem Variablen k zu.
k = ((Base)s).i; // Das hier soll vermutlich 10 dem Variablen k zuweisen.
// Ich bin mir aber nicht sicher, ob die richtige Syntax
// ((Base)s).i; oder (Base)s.i; ist.
// Was wäre der Unterschied?
Es gibt hier einen grundsätzlichen Fehler in deiner Frage: extends bedeutet, dass die Klasse (vor dem extends) aus der Klasse (nach dem extends) erbt. Wenn du allerdings eine Variable definierst, so kannst du von dieser Klasse nicht mehr auf den Uhrsprungswert zugreifen (Da einenZuweisung überschreibt).
Zu deiner anderen Frage: Der richtige syntax wäre: ((Base)s).i um auf das i von s zuzugreifen. (Base)s.i sollte einen Fehler erzeugen, da du versuchst aus einer int-Variable ein Objekt von Typ Base zu machen. Ich hoffe du verstehst den unterschied, wenn nicht einfach nachfragen.
Der richtige syntax wäre: ((Base)s).i um auf das i von s zuzugreifen. (Base)s.i sollte einen Fehler erzeugen, da du versuchst aus einer int-Variable ein Objekt von Typ Base zu machen.
public class MeineKlasse {
public static void main(String[] args) {
Sub s = new Sub();
int k = s.i;
k = ((Base) s).i;
System.out.println("Wert von k ist: " + k);
}
}
class Base {
int i = 10;
}
class Sub extends Base {
int i = 20;
}
run:
Wert von k ist: 10
BUILD SUCCESSFUL (total time: 0 seconds)
Deswegen sollte man so einen Scheiß erst gat nicht machen. Entweder ich überschreibe die Elternvariable und dann benutze ich diese auch nicht mehr oder ich nenne die Variable anders. Das oben gezeigte ist ganz schlechter Stil.
Deswegen sollte man so einen Scheiß erst gat nicht machen. Entweder ich überschreibe die Elternvariable und dann benutze ich diese auch nicht mehr oder ich nenne die Variable anders. Das oben gezeigte ist ganz schlechter Stil.
Danke Dir! Ich bin immer noch beim Lernen, wollte nur wissen, ob so was syntaktisch und technisch machbar ist. Aber ich bin mit Dir einverstanden: so was darf man nicht benutzen, es wäre keine gute Programmierung.
Sinnvoll ... im Grunde schon, Aber im Normalfall macht man das nicht mit Variablen.
Du wirst das oft finden, wenn eine Komponente eine eigene Paint-Methode braucht.
Du erstellst dann meistens ein Panel (oder eine andere Komponente), überschreibst die Methode paintComponent() und rufst darin super.paintComponent() auf, ergänzt den Code dann mit deinen eigenen Elementen.
Eine Variable mit verschiedenen Werten hingegen führt nur zu Chaos.
Du wirst das oft finden, wenn eine Komponente eine eigene Paint-Methode braucht.
Du erstellst dann meistens ein Panel (oder eine andere Komponente), überschreibst die Methode paintComponent() und rufst darin super.paintComponent() auf, ergänzt den Code dann mit deinen eigenen Elementen.
Du wirst das oft finden, wenn eine Komponente eine eigene Paint-Methode braucht.
Du erstellst dann meistens ein Panel (oder eine andere Komponente), überschreibst die Methode paintComponent() und rufst darin super.paintComponent() auf, ergänzt den Code dann mit deinen eigenen Elementen.