Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt

Loki

Aktives Mitglied
Ich hoffe, ich blamiere mich jetzt mal nicht allzu sehr.
Erst neulich ist mir folgendes Verhalten bewusst gewurden, wofür ich gern eine Erklärung bzw. Workaround hätte.

Ich habe einen Interpreter geschrieben, der seine 3 Typen von einer Klasse(Basis) erbt. Weil Java statisch Typen prüft, musste ich immer casten bei Funktionsrückgaben, da das Basisobjekt verwendet wurde, der Code wurde letztendlich ziemlich wild und häßlich. Das habe ich dann umgegangen indem ich dem Basisobjekt das gleichnamige Attribut value hinzugefügt hatte. Nun musste nicht mehr ganz so oft gecastet werden.

Nun zeigt meine IDE(Eclipse) interessanterweise 2 Attribute an für meine Kindobjekte. Eins von der Basis und ihr eigenes(Ein Begriff zum googlen hätte ich gern, um mich einzulesen). Mir ist mehr oder weniger nicht exakt klar, warum das so ist. Wieso überschreiben die Kindobjekte das Attribut nicht? Das eine Attribut stammt von der Basis das andere vom Kind. Der akt. Typ ist vom Kind, deklariert ist klarerweise als Basistyp. Sie leben getrennt nebeneinander und der eine ist via super vom Kind aus zu erreichen.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
siehe Vererbungs-Kapitel in Lehrbüchern
hier
Galileo Computing :: Java ist auch eine Insel - 5 Eigene Klassen schreiben
5.11.5 Eine letzte Spielerei mit Javas dynamischer Bindung und überschatteten Attributen

wohl relativ knapp geraden,
der entscheidende Satz ist:
"Wir erkennen hier eine sehr wichtige Eigenschaft von Java, nämlich dass Variablen nicht dynamisch gebunden werden."

das Suchen zur Laufzeit fällt weg, Attribute kann der Compiler schon direkt auf die richtige Klasse zurückführen,
wobei super-Aufruf auch bei Methoden geht, die anderen Zugriffe abhängig vom Typ einer Variablen sind interessanter,
siehe Beispiel im Link


umgehen kann man diese Besonderheit, indem man nach außen und super() einfach ohne Attribute arbeitet, nur mit Methoden,
dass die IDE zwei Attribute anzeigt, was ich nicht ganz nachvollziehen kann, Screenshot?, läßt sich dabei vielleicht nicht vermeiden, oder mit private
 

Loki

Aktives Mitglied
Auf die schnelle und ungetestet.

Java:
public class Type {public float value;}

public class Type1 extends Type {
  public float value;
  
  Type1(String s) {
     super.value = this.value = value;
  }
}

public class Type2 extends Type {
  public String value; 

  Type2(String s) {
    this.value = value;
  }

}

Java:
Type test() {
  return new Type2();
}

Type b = test();
if(b instanceof Type1) {
  b.value *= -1; //verändert Type und nicht Type1
} else {
  //irgendwas
}

f9fmew3p.jpg
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Type b = test();
if(b instanceof Type1) {
b.value *= -1; //verändert Type und nicht Type1
Die Variable b ist ja auch als Type und nichts als Type1 deklariert.

Evtl. hilft es ja, wenn Du beschreibst was Du konkret vorhast. Könnte man sich das Casten nicht den Einsatz Generics sparen. Evtl. ist aber auch einfach falsch, dass die Klassen von einander erben.
 
S

SlaterB

Gast
@Michael...
der Sinn/ die Frage ist doch ziemlich klar, warum wird nicht value aus Type1 verwendet?

> Die Variable b ist ja auch als Type und nichts als Type1 deklariert.
verlangt eben noch weitere Erläuterungen, Unterschied zur Vererbung von Methoden usw.

> Evtl. hilft es ja, wenn Du beschreibst was Du konkret vorhast.
bei Verständnis einer Idee/ Technik ist der Einsatz eher irrelevant,
durch Workaround die aktuelle Not abzuhelfen und die Frage offen zu lassen ist wohl nicht das Ziel,
letztlich muss es anders gelöst werden, das ist klar, aber nur nach Verständnis

------

siehe auch mein Posting von 10:44 falls bisher übersehen
 

Michael...

Top Contributor
> Die Variable b ist ja auch als Type und nichts als Type1 deklariert.
verlangt eben noch weitere Erläuterungen, Unterschied zur Vererbung von Methoden usw.
Die Erläuterung wäre an einer Variablen eines bestimmten Typs, kann man auf die in der Klasse definierten Methoden und Member zugreifen.
> Evtl. hilft es ja, wenn Du beschreibst was Du konkret vorhast.
bei Verständnis einer Idee/ Technik ist der Einsatz eher irrelevant,
OK, das hätte ich vielleicht besser "Evtl. hilft es mir..." formulieren sollen ;-) Mir fehlt nämlich das Verständnis für die Idee
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Polymorphie Aufgabe Allgemeine Java-Themen 15
J Unterschied: Polymorphie und Dynamisches Binden Allgemeine Java-Themen 8
G Polymorphie Allgemeine Java-Themen 1
D Unterschied Vererbung und Polymorphie? Allgemeine Java-Themen 4
L Polymorphie - OO Problem Allgemeine Java-Themen 6
D Polymorphie Knobelspaß ;-) Allgemeine Java-Themen 15
R Problem mit Polymorphie... Allgemeine Java-Themen 7
OnDemand XML desializing Attribute bringt nicht erwartetes Ergebnis Allgemeine Java-Themen 16
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
Junger_Basileus Attribute, Arrays, Schleifen Allgemeine Java-Themen 9
L xml node mit attribute auslesen Allgemeine Java-Themen 2
D JSF Bean Attribute bei Seitenaufruf Allgemeine Java-Themen 6
C Attribute aus HTML Tags auslesen Allgemeine Java-Themen 6
B Mp3-Attribute auslesen & beschreiben Allgemeine Java-Themen 6
M PDF Drucker-Attribute hinterlegen Allgemeine Java-Themen 3
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
T [htmlparser.sourceforge.net] Attribute extrahieren Allgemeine Java-Themen 3
T Namenskonventionen für Objekt-Attribute Allgemeine Java-Themen 12
J Attribute eines Objekts in ByteArray Allgemeine Java-Themen 3
I Attribute in Textfile auslesen Allgemeine Java-Themen 13
G [JDK 6u2] - JAR Failed to load Main-Class manifest attribute Allgemeine Java-Themen 6
E Attribute in Interfaces möglich? Allgemeine Java-Themen 17
MQue Button Attribute setzen Allgemeine Java-Themen 14
F JSP XML ATTRIBUTE Allgemeine Java-Themen 2
H Nullpointer exception, Attribute in Label schreiben? Allgemeine Java-Themen 4
L Alle Attribute eines Source-Files auslesen Allgemeine Java-Themen 2
J Attribute beim Drucken ändern/ausstellen Allgemeine Java-Themen 8
A Dynamisch Attribute hinzufügen Allgemeine Java-Themen 3
B Zugriff auf Attribute/Methoden der init-Klasse Allgemeine Java-Themen 10
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
X Collections Fragen zu gleichen Elementen in TreeSet Allgemeine Java-Themen 35
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
L Sicherstellen das 2x die gleichen Daten unter bestimmten Keys enthalten sind. Allgemeine Java-Themen 6
M verschiedene Methonden innerhalb des gleichen Threads Allgemeine Java-Themen 7
S Mappen aller Paramater der gleichen klasse Allgemeine Java-Themen 3
S Methode übergibt immer den gleichen Wert Allgemeine Java-Themen 21
reibi Classenpath mit mehreren gleichen jar-Files Allgemeine Java-Themen 7
P HashMap mit mehreren gleichen keys Allgemeine Java-Themen 4
E Timer - gleichen Task mehrfach planen Allgemeine Java-Themen 2
B JUnit - Gleichen Test x-mal durchlaufen Allgemeine Java-Themen 2
M java klassen beerben u. den gleichen namen verwenden?(Naming Allgemeine Java-Themen 6
thE_29 Konsolenausgabe immer am gleichen Platz Allgemeine Java-Themen 14
A Ungleicheit von zwei gleichen Strings Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben