class Tree{}
class Pine extends Tree{}
class Oak extends Tree{}
public class p32
{ public static void main( String[] args )
{ Tree tree = new Pine();
if( tree instanceof Pine )
System.out.println( "Pine" );
if( tree instanceof Tree )
System.out.println( "Tree" );
if( tree instanceof Oak )
System.out.println( "Oak" );
else System.out.println( "Oops" );
}
}
Desculpem ressuscitar o tópico, mas é exatamente minha dúvida. Está correto isso, árvore é um Pinheiro? Não seria ao contrário, Pinheiro é uma árvore?
Este operador é válido somente quando há herança entre classes ou pode ser usando com classes distintas?
No caso dele “arvore é um pinheiro” pois arvore eh o nome do objeto Pinheiro que com certeza deve ser subclasse de Arvore.
Fico confuso mesmo o nome (arvore) do objeto Pinheiro… mas isso eh so nomeclatura…
É valido quando ha heranca ou implementacao de interface…
Sempre seguindo a logica “É UM”
No caso, “árvore instanceof Pinheiro”, verifica se o conteúdo da variável árvore é do tipo Pinheiro.[/quote]
Neste caso seria “pinheiro(Objeto) instanceof Pinheiro” correto? É que ficou confuso o nome da variável “tree” referenciando um objeto Pinheiro.
Obrigado a todos, entendi o conceito. Contudo não entendi onde eventualmente irei usar isto. Alguém pode dar um exemplo prático de quando vou verificar a relação É-UM?
Não acho que seja muito utilizado, mas eis um exemplo:
// Percorre os componentes de um container e limpa os text fields
for (Component c : container.getComponents()) {
if (c instanceof JTextField) { // Verifica se o componente é um JTextField usando instanceof
((JTextField)c).setText(""); // Se for, limpa o texto
}
}
Fonte: http://www.guj.com.br/java/216682-pegar-componentes-de-um-jframe#1105939
Exatamente, pois o objeto referenciado por “doberman” é uma instância da classe cao.
Mas como já foi discutido, isto é mais usado quando se tem herança e deseja-se saber a qual classe da herança o objeto pertence.
[quote=gRoOve]Exatamente, pois o objeto referenciado por “doberman” é uma instância da classe cao.
Mas como já foi discutido, isto é mais usado quando se tem herança e deseja-se saber a qual classe da herança o objeto pertence.[/quote]
public static void main(String[] args) {
Object testObject = new ArrayList();
displayObjectClass(testObject);
}
public static void displayObjectClass(Object o) {
if (o instanceof Vector)
System.out.println(“Object was an instance
of the class java.util.Vector”);
else if (o instanceof ArrayList)
System.out.println(“Object was an instance of
the class java.util.ArrayList”);
else
System.out.println("Object was an instance of the "
+ o.getClass());
}
}[/code]
[quote=gRoOve]Desculpem ressuscitar o tópico, mas é exatamente minha dúvida. Está correto isso, árvore é um Pinheiro? Não seria ao contrário, Pinheiro é uma árvore?
Este operador é válido somente quando há herança entre classes ou pode ser usando com classes distintas?[/quote]
Ele está correto, a árvore é um pinheiro, ele se refere ao tipo da árvore.
Outro exemplo é:
if(cachorro é um pastor alemão){
System.out.println(“Pastor Alemão”);
else if(cachorro é um Labrador){
System.out.println(“Labrador”);
}