Klasseninitialisierung unklar

DennisXX

Bekanntes Mitglied
Hallo !

Ich habe zwei Klassen (Klasse A und Klasse B). Klasse B erweitert Klasse A.

Jetzt habe jetzt folgenden Code und es wäre nett, wenn mir jemand erklären könnte, warum die letzte Codezeile nicht funktioniert.

Java:
A refA = new A();  //funktioniert

B refB = new B();   //funktioniert

A refA = new B();  //funktioniert auch noch zwecks Polymorphie

B refB = new A()  //warum funktioniert das nicht mehr?

Danke !

Dennis
 
Zuletzt bearbeitet:
Ein A ist kein B.

Stell dir vor du hast eine Klasse Person, und zwei Unterklassen Professor und Student.

Ein Student ist immer eine Person. Aber eine Person ist nicht immer ein Student.
 
B extends A.
Alles was A hat,hat damit auch B.
Aber alles was B hat, hat A nicht.
Java:
B refB = new A()
Damit hätte refB alle Funktionen der Klasse B, aber A kann diese doch gar nicht bereitstellen.
 
Ein bisschen hochgestochener:
Merke: Eine Referenzvariable refB, die mit [c] B refB[/c] deklariert wird kann enthalten:
  1. eine Referenz auf eine Instanz der Klasse B,
  2. eine Referenz auf eine Instanz einer Unterklasse von B
  3. null

Da A aber eine Superklasse von B ist, geht das nicht.

Das geht noch viel netter wenn [c]class Katze extends Tier ...[/c] und [c]class Hund extends Tier[/c] gilt

[Java]
Katze a = new Tier(); //geht nicht

Tier b = new Katze(); //OK
Tier c = new Hund(); //OK

Katze d = b; //kompiliert nicht! obwohl b eine Katze ist!
Katze e = c; //kompiliert nicht!

Katze x = (Katze) b; //kompiliert und läuft
Katze y = (Katze) c; //kompiliert zwar, wirft aber ClassCastException, weil c eben keine Katze ist.
[/code]
 

Zurück
Oben