explizites Typ Casting Beispiel in Java

Ich bin auf dieses Beispiel gestoßenhttp://www.javabeginner.com/learn-java/java-object-typecasting und in dem Teil, in dem es um explizites Typgießen geht, gibt es ein Beispiel, das mich verwirrt.

Das Beispiel:

class Vehicle {

    String name;
    Vehicle() {
        name = "Vehicle";
    }
}

class HeavyVehicle extends Vehicle {

    HeavyVehicle() {
        name = "HeavyVehicle";
    }
}

class Truck extends HeavyVehicle {

    Truck() {
        name = "Truck";
    }
}

class LightVehicle extends Vehicle {

    LightVehicle() {
        name = "LightVehicle";
    }
}

public class InstanceOfExample {

    static boolean result;
    static HeavyVehicle hV = new HeavyVehicle();
    static Truck T = new Truck();
    static HeavyVehicle hv2 = null;
    public static void main(String[] args) {
        result = hV instanceof HeavyVehicle;
        System.out.print("hV is an HeavyVehicle: " + result + "\n");
        result = T instanceof HeavyVehicle;
        System.out.print("T is an HeavyVehicle: " + result + "\n");
        result = hV instanceof Truck;
        System.out.print("hV is a Truck: " + result + "\n");
        result = hv2 instanceof HeavyVehicle;
        System.out.print("hv2 is an HeavyVehicle: " + result + "\n");
        hV = T; //Sucessful Cast form child to parent
        T = (Truck) hV; //Sucessful Explicit Cast form parent to child
    }
}

Warum heißt es in der letzten Zeile, in der T die Referenz hV zugewiesen und als (Truck) typisiert wurde, im Kommentar, dass dies eine erfolgreiche explizite Besetzung von Eltern zu Kindern ist? Ich verstehe, dass das Casting (implizit oder explizit) nur den deklarierten Objekttyp ändert, nicht den tatsächlichen Typ (der sich niemals ändern sollte, es sei denn, Sie weisen dem Feldverweis dieses Objekts tatsächlich eine neue Klasseninstanz zu). Wenn hv bereits eine Instanz einer HeavyVehicle-Klasse zugewiesen wurde, die eine Superklasse der Truck-Klasse ist, wie kann dieses Feld dann in eine spezifischere Unterklasse namens Truck umgewandelt werden, die von der HeavyVehicle-Klasse ausgeht?

Nach meinem Verständnis dient das Casting dazu, den Zugriff auf bestimmte Methoden eines Objekts (Klasseninstanz) zu beschränken. Daher können Sie ein Objekt nicht als eine spezifischere Klasse umwandeln, die über mehr Methoden verfügt als die tatsächlich zugewiesene Klasse des Objekts. Dies bedeutet, dass das Objekt nur als Superklasse oder als dieselbe Klasse wie die Klasse umgewandelt werden kann, aus der es tatsächlich instanziiert wurde. Ist das richtig oder irre ich mich hier? Ich lerne immer noch und bin mir nicht sicher, ob dies die richtige Sichtweise ist.

Ich verstehe auch, dass dies ein Beispiel für Downcasting sein sollte, aber ich bin nicht sicher, wie dies tatsächlich funktioniert, wenn der tatsächliche Typ nicht über die Methoden der Klasse verfügt, auf die dieses Objekt downcastt wird. Verändert explizites Casting irgendwie den tatsächlichen Objekttyp (nicht nur den deklarierten Typ), sodass dieses Objekt nicht mehr eine Instanz der HeavyVehicle-Klasse ist, sondern jetzt eine Instanz der Truck-Klasse wird?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage