Instantiierung

Status
Nicht offen für weitere Antworten.

sowieso

Aktives Mitglied
Hallo!

Sagen wir, es gibt eine geordnete Collection "OrderedColl". Und jetzt machen wir das:

Code:
Collection <E> bla = new OrderedColl <E>();

Ist dann "bla" geordnet oder nicht, weil ich nicht das geschrieben hab:

Code:
OrderedColl <E> bla = new OrderedColl <E>();
?
 

tincup

Bekanntes Mitglied
Es ist immer das Objekt, was du tatsächlich instantiiert hast. Wenn du z.B. mal
Code:
System.out.println(bla.getClass())
machst wird es klarer.

Ist ein grundlegendes Prinzip der Vererbung.

Übrigens: Da Collection hier sogar ein Interface ist, kann es ja nur geordnet sein (unter der Annahme, dass "OrderedColl" geordnet ist, kenne die Klasse ja jetzt nicht). Denn Collection selbst hat keinen eigenen Code, es kann also gar nicht zu einer Nicht-sortierung kommen.

Logisch?
 

Marco13

Top Contributor
bla ist geordnet. Es IST ja eine OrderedCollection. Durch das "Collection bla" ist sie 'nur als Collection bekannt' (d.h. man sieht ihr nichtmehr direkt an, dass sie geordnet ist, aber sie ist es)

String string = "Hallo";
Object object = string; // 'object' ist nach wie vor ein String - auch wenn man jetzt nurnoch weiß, dass es "irgendein" Object ist
 

sowieso

Aktives Mitglied
Verstehe, d.h. auch so ist bla geordnet?

Code:
UnorderedColl <E> bla = new OrderedColl <E>();

Wenn UnorderedColl eine Klasse ist, die in der Hierachy unter der Klasse OrderedColl ist. UnorderedColl ordnet Elemente nicht.

?
 

Marco13

Top Contributor
Schreib's ggf. mal mit den konkreten Klassennamen. Es gibt AFAIK keine Klasse, die von einer anderen Klasse erbt, und bei der die Sortiertheit der Klasse, von der geerbt wird, verloren geht - das würde auch keinen Sinn machen....
 

sowieso

Aktives Mitglied
Wieso, es ist doch genau anders rum. Es wird von einer ungeordneten Collection geerbt (UnorderedColl) und die OrderedColl liegt in der Hierachy weiter unten, ist also eine Unterklasse von UnorderedColl.

Leider fällt mir jetzt kein Beispiel ein. Aber mich würde einfach mal die Theorie interessieren.
 

sowieso

Aktives Mitglied
Oh sorry, ich meinte aber ursprünglich das letzte, also

Es wird von einer ungeordneten Collection geerbt (UnorderedColl) und die OrderedColl liegt in der Hierachy weiter unten, ist also eine Unterklasse von UnorderedColl.

Und jetzt frag ich mich, ob bei

Code:
UnorderedColl <E> bla = new OrderedColl <E>()

bla dann geordnet ist oder nicht?
 
M

maki

Gast
bla dann geordnet ist oder nicht?
Natürlich ist es eine OrderedColl.

Der Typ der Referenz sagt nur aus, welche Methoden ich aufrufen kann.
Der Type des Objektes weiss nix vom Typen der Referenz ;)
 

Illuvatar

Top Contributor
bla wäre in dem Fall geordnet. Das ganze wäre allerdings schlechtes Klassendesign, weil wir dann eine Klasse OrderedColl extends UnordreedColl hätten. Und zu behaupten "eine geordnete Liste ist eine ungeordnete Liste" - na ja ;)
 

Marco13

Top Contributor
Illuvatar hat gesagt.:
Das ganze wäre allerdings schlechtes Klassendesign, weil wir dann eine Klasse OrderedColl extends UnordreedColl hätten. Und zu behaupten "eine geordnete Liste ist eine ungeordnete Liste" - na ja ;)

Das ganze IST ja so: Bei Collection (die ungeordnet ist), und List (die geordnet ist, aber Collection extendet). Die Eigenschaft, "geordnet zu sein", ist dann eben etwas, was bei der Vererbung "dazukommt". (Anders gesagt: "Ungeordnet" zu sein ist ja keine festgelegte, postulierte Eigenschaft von "Collection" - es wird nur nirgendwo gesagt, DAS eine Collection geordnet ist - also KANN sie sowohl geordnet als auch ungeordnet sein).

Aber dass es in ähnlichen Zusammenhängen Schweirigkeiten bei der Vererbung geben kann, und dass diese Idee, dass "beim Vererben nur Eigenschafen dazukommen" auch an (philosophisch wirkende) Grenzen stößt, sieht man bei so klassischen Fragen, ob es nun "Rectangle extends Square" oder "Square extends Rectangle" heißen muss .... :roll:
 

Janus

Bekanntes Mitglied
beim vererben kommen immer eigenschaften dazu, anders gehts gar nicht. dass einige das gegenteil behaupten liegt schlicht daran, dass auf irgendwann implementierungsebene diskutiert wird.
 
M

maki

Gast
Janus hat gesagt.:
beim vererben kommen immer eigenschaften dazu, anders gehts gar nicht. dass einige das gegenteil behaupten liegt schlicht daran, dass auf irgendwann implementierungsebene diskutiert wird.
Naja, eigentlich geht es um Generalisierung und Spezialisierung.
Spezialisierung kann auch heissen, das verhalten so geändert wird das Eigenschaften und Verhalten "wegkommen", welche die Superklasse noch hatte.
 

sowieso

Aktives Mitglied
alles klar! Und sorry noch mal dafür, dass ich so unordered war ;) (wo ist der schnkelkloppfer smiley?)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben