Se você tentar fazer Cast de null ele aceita, isso é normal.
evertonsilvagomesjav
Nessa linha aqui nao gera excessao n?
17. A a2=(A)m; // um objeto A não é um objeto "Min", e nessa linha um objeto "Min" passaria no teste de instaceof tanto para B quanto para Min, nao?
Z
Zuvirandu
O NullPointer só aconteceria se voce tentasse usar o objeto de fato. (chamada de metodo ou attributo)
Com instancias de objetos, a VM verifica se o tipo do objeto corresponde a tipo da variavel que está sendo atribuída.
Se houvesse algum exception, nesse caso, seria um ClassCastException.
Porém, no caso do null, essas verificações de tipo são desnecessárias, ja que um objeto não existe em si.
Z
Zuvirandu
evertonsilvagomesjava:
Nessa linha aqui nao gera excessao n?
17. A a2=(A)m; // um objeto A não é um objeto "Min", e nessa linha um objeto "Min" passaria no teste de instaceof tanto para B quanto para Min, nao?
Não gera porque é null e a validação ocorre em runtime.
luciano2
Só da exception se m tiver carregado uma instancia, com m é null então se trata de um Cast de null para “A”
evertonsilvagomesjav
luciano@@:
Só da exception se m tiver carregado uma instancia, com m é null então se trata de um Cast de null para “A”
Entao mas eu digo ClassCastException mesmo nessa linha
A a = (A)m ==> A a = (A)null;
.
aqui m nao deixa de ser null n?
pmlm
[quote=evertonsilvagomesjava]
aqui m nao deixa de ser null n?
17. A a2=(A)m; // um objeto A não é um objeto "Min", e nessa linha um objeto "Min" passaria no teste de instaceof tanto para B quanto para Min, nao?
Não gera porque é null e a validação ocorre em runtime.
bom, é preciso ter cuidado. Na boa verdade a validação acontece em tempo de compilação. Acontece também em runtime, mas em tempo de compilação tb ( lembrar que java é fortemente tipado).
O que acontece ali é que está sendo usado um cast. O cast significa “compilador, esquece as regras, confia em mim”. Protanto, o compilador ignora o fato de A não ser do mesmo tipo de m. Isto não tem nada que ver com o null.
O null sim, só é verificado em runtime. e em runtime, qq variável pode ser null.