exemplo de conversão de tipo explícito em java

Eu me deparei com este exemplohttp://www.javabeginner.com/learn-java/java-object-typecasting e na parte em que fala sobre vazamento de tipo explícito, há um exemplo que me confunde.

O exemplo:

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
    }
}

Na última linha em que T é atribuída a referência hV e typecast como (Truck), por que ela diz no comentário que essa é uma conversão explícita bem-sucedida de pai para filho? Pelo que entendi, a conversão (implícita ou explícita) só alterará o tipo de objeto declarado, não o tipo real (que nunca deverá mudar, a menos que você realmente atribua uma nova instância de classe à referência de campo desse objeto). Se hv já foi atribuído uma instância de uma classe HeavyVehicle que é uma superclasse da classe Truck, como então esse campo pode ser convertido em uma subclasse mais específica chamada Truck que se estende da classe HeavyVehicle?

A maneira que eu entendo é que o casting serve ao propósito de limitar o acesso a certos métodos de um objeto (instância de classe). Portanto, você não pode converter um objeto como uma classe mais específica que tenha mais métodos do que a classe atribuída real do objeto. Isso significa que o objeto só pode ser lançado como uma superclasse ou a mesma classe que a classe da qual ele foi realmente instanciado. Isso está correto ou estou errado aqui? Eu ainda estou aprendendo, então não tenho certeza se essa é a maneira correta de ver as coisas.

Eu também entendo que isso deve ser um exemplo de downcasting, mas não tenho certeza de como isso realmente funciona se o tipo atual não tiver os métodos da classe para a qual este objeto está sendo reduzido. A conversão explícita de alguma forma altera o tipo real de objeto (não apenas o tipo declarado), de modo que esse objeto não seja mais uma instância da classe HeavyVehicle, mas agora se torne uma instância da classe Truck?

questionAnswers(6)

yourAnswerToTheQuestion