Sabemos que os tigres são animais. Se a classe animal for a classe parental da classe tigre, deve-se notar que quando um tigre é um animal, o tigre perderá seus atributos e funções únicos. Do ponto de vista do pensamento humano, dizer “o tigre é um animal” pertence ao método de pensamento ascendente, que é semelhante ao objeto de transformação ascendente na linguagem Java.
Suponha que a classe Animal seja a classe pai da classe Tiger. Ao usar uma subclasse para criar um objeto e colocar a referência deste objeto no objeto da classe pai, por exemplo:
Animala;a=newTigre();
ou
Animala;Tigerb=newTiger();a=b;
Neste momento, chamar o objeto a de objeto transformado para cima do objeto b é como dizer "um tigre é um animal". A subclasse é responsável por criar a entidade do objeto transformado, mas o objeto transformado perderá alguns atributos e funções do objeto original.
O objeto de transformação ascendente possui as seguintes características:
(1) O objeto transformado não pode operar as variáveis de membro recém-adicionadas da subclasse e não pode chamar os novos métodos da subclasse.
(2) O objeto transformado pode acessar variáveis de membro herdadas ou ocultas pela subclasse e também pode chamar métodos herdados pela subclasse ou métodos de instância substituídos pela subclasse. O objeto upcast opera métodos herdados pela subclasse ou métodos de instância substituídos pela subclasse, e sua função é equivalente a chamar esses métodos no objeto da subclasse. Portanto, se uma subclasse substituir um método de instância da classe pai, quando o objeto upcast do objeto chamar esse método de instância, o método de instância substituído pela subclasse deverá ser chamado.
Perceber:
(1) Não confunda objetos criados pela classe pai com objetos do tipo up do objeto da subclasse.
(2) O objeto upcast do objeto pode ser forçado a ser convertido em um objeto de subclasse. Neste momento, o objeto de subclasse possui todos os atributos e funções da subclasse.
(3) Você não pode atribuir referências a objetos criados pela classe pai a objetos declarados pela subclasse. Por exemplo, você não pode dizer “A pessoa é chinesa”.