-
Notifications
You must be signed in to change notification settings - Fork 0
1.4 Use the instanceof operator and casting
Weverton edited this page Aug 29, 2016
·
3 revisions
Exemplo:
interface I{}
class A implements I{}
class B extends A {}
class C extends B{}
A a = new A();
B b = new B();
b é um A então o cast é permitido;
b não implementa I, mas ele herda de A que implementa I
a = (B)(I)b; //VAI COMPILAR E EXECUTAR COM SUCESSO
a implementa I, então cast correto;
O cast explicito para B é valido, entretando esse a não esta apontando para um objeto do tipo b sendo assim vai dar erro em tempo de execução.
b = (B)(I) a //VAI COMPILAR MAS VAI DAR ERRO EM TEMPO DE EXECUCAO
No exemplo abaixo tudo vai retornar true:
class A {}
class B extends A {}
class C extends B {}
class D extends C {}
public class Teste5 {
public static void main(String[] args) {
D d = new D();
System.out.println("d instanceof A? " + (d instanceof A));
System.out.println("d instanceof B? " + (d instanceof B));
System.out.println("d instanceof C? " + (d instanceof C));
System.out.println("d instanceof D? " + (d instanceof D));
}
}
Abaixo o código compila corretamente, s2 pode ser atribuido para s1 com cast ou sem cast.
class Super { }
class Sub extends Super { }
public class TestClass {
public static void main(String[] args) {
Super s1 = new Super(); //1
Sub s2 = new Sub(); //2
s1 = (Super) s2; //3
}
}