Unterschied zwischen Dynamischen und Statischen Typ-Zuweisungen in Java

Angesichts der Folgen Klassenhierarchie, welche die dynamische und statische Typen für die folgenden Aussagen?

Klassenhierarchie:

class Alpha {}

class Beta extends Alpha {}

class Gamma extends Alpha {}

class Epsilon extends Alpha{}

class Fruit extends Gamma{}

class Golf extends Beta {}

class Orange extends Fruit{}

Für jede der folgenden Aussagen, Statische Typ? Dynamische Typ?:

Fruit f = new Fruit();
Alpha a = f;
Beta b = f;
a = b;
Gamma g = f;

Meine Antworten/Fragen
Ich verstehe, dass Fruit f = new Fruit() werden sowohl statische und dynamische Typ-Obst.
Alpha a = f; Typ Alpha zur compile-Zeit (statisch) und geben Sie Obst zur Laufzeit (dynamisch).

Gamma g = f; - Typ Gamma zur compile-Zeit (statisch) und geben Sie Obst zur Laufzeit (dynamisch).

Allerdings weiß ich nicht, die anderen zwei Antworten. Beta b = f ist eine Instanz, die in die zwei Unterklassen der gleichen super-Klasse sind einander zugeordnet, also bin ich nicht sicher, ob es wäre der Typ, Beta-oder Typ Alpha zur compile-Zeit (statisch). Und a = b ist eine Zuordnung nach Deklaration so bin ich nicht sicher, was die Antwort sein würde. Jemand bitte helfen Sie mir danke!

Ich bin verwirrt, wie so etwas sein kann, sowohl statische als auch dynamische, aber vielleicht denke ich in einem anderen Kontext.
Entweder hast du einen Tippfehler im code hast du geschrieben, oder du bist posting uncompilable code. Sollte Gamma erweitern Beta statt Alpha?
Sie nur jemals schaffen, eine Fruit und dieser Typ ist der Typ nur zur Laufzeit, die es jemals geben wird. Es ist nicht zu ändern, es wenn geben Sie Verweise hinzufügen, um es.
hochgeladen Beispiel-code ideone.com/wdk7oa Wie bereits erwähnt, nicht kompilierbare Main.java:15: Fehler: inkompatible Typen Beta b = f;

InformationsquelleAutor user3088470 | 2013-12-10

Schreibe einen Kommentar