quando ele chama ((TestA)new TestB()).start() ele está chamando o método start da classe TestB…
mas como assim?
seguinte… TestB subscreve o método start da classe TestA, então
quando temos um novo objeto de TestB, a versão subscrita é chamada.
zoren
Ele criou uma instância da classe B e fez o cast da mesma para a ClasseA e invocou o método start que a classeB sobrescrevia
Note que isso só é possivel pois a classeB herda da CLasse A, vc pode tentar declarar métodos diferentes am ambas as classes pra ver como funciona
Se vc cria um objeto da classeA e instância como a classeB, esse objeto da classeA terá todas as caracteristicas da classeB, mas só os métodos que a classe A possui
os que não tem na classe A serão perdidos
rmala_ti
Isso é uma chamada polimórfica.
Usando uma variável de referência Pai(TestA) para um objeto Filho(TestB).
Como a classe filha TestB sobrescreveu o método herdado start() este será selecionado.
No tempo de execução o método será selecionado dinâmicamente baseado no tipo real do objeto, ou seja, o que foi criado após new.
Espero ter ajudado.
robinsonbsilva
Bom dia Jovens,
Só para reforçar, “leve em consideração o objeto criado”, que no nosso caso é new TestB().
Esse exercício confunde devido ao “cast” (TestA), mas "sempre tenha em mente que o que vale é o “objeto criado”.
deyvid
Mas gente boa, não tinha que rolando um “upCast” ??? para a class TestA e logo o método da classe A?
Um abração pra todos
zoren
Mesmo vc fazendo o cast, teve a implementação da classe B
É igual se vc fizesse
ClassAclasse=newClasseB();
Vc só veria os métodos da ClassA, mas eles teriam a implementação da ClassB
deyvid
Pois é zoren , mas você esta se referindo ao “downcast” o que entendi. Mas o problema é parace que esta fazendo “upcast” e é essa minha dúvida.