uma duvida nesse exemplo pois coloquei na opção 1
pra entender melhor se o metodo existisse na classe Base seria certo…
é isso nessa condição somente da pra usar qdo Agg a = new Agg() é isso a idéia ???
classBase{}classAggextendsBase{publicStringgetFields(){Stringname="Agg";returnname;}}publicclassAvf{publicstaticvoidmain(Stringargv[]){Basea=newAgg();//Here}}Whatcodeplacedafterthecomment//Here will result in calling the getFields method resulting in the output of the string "Agg"?Incorrectoptionsareshownbystrikethrough,anyoptionsyouchosearemarkedbyatick1)System.out.println(a.getFields());2)System.out.println(a.name);3)System.out.println((Base)a.getFields());4)System.out.println(((Agg)a).getFields());
A resposta é 4.
2 dá erro de compilação porque não existe um atributo name na classe Base.
3 dá erro de compilação porque o cast tem prioridade menor do que o operador “.”, resultando em um cast de String para Base que o compilador obviamente vê que é impossível.
1 dá erro de compilação porque a referência é de Base e Base não tem o método getFields().
4 é correto porque o cast de Base para Agg é válido e Agg tem o método getFields() que sempre retorna a String “Agg”.
marcosharbs
é possivel fazer isso?
Basea=newAgg();
??
rafaelglauber
marcosharbs:
é possivel fazer isso?
Basea=newAgg();
??
Por quê não poderia? Agg é uma especialização de Base. O contrário é que seria incorreto, lembre-se do teste É-UM.
Cachorro é um Animal, mas nem todo Animal é um Cachorro.
victorwss
marcosharbs:
é possivel fazer isso?
Basea=newAgg();
??
Sim. Isso é possível porque Agg herda de Base.
É o mesmo que fazer isso:
Animala=newCachorro();
Isso é possível porque uma variável do tipo da superclasse pode receber uma instância da subclasse:
class X implements ActionListener { ... }
ActionListener a = new X();
marcosharbs
hmmm entendi
obrigado pelos exemplos e por me tirar essa duvida
vlww
T
tiago_stos
paribe:
Olá,
uma duvida nesse exemplo pois coloquei na opção 1
pra entender melhor se o metodo existisse na classe Base seria certo....
é isso nessa condição somente da pra usar qdo Agg a = new Agg() é isso a idéia ?????
classBase{}classAggextendsBase{publicStringgetFields(){Stringname="Agg";returnname;}}publicclassAvf{publicstaticvoidmain(Stringargv[]){Basea=newAgg();//Here}}Whatcodeplacedafterthecomment//Here will result in calling the getFields method resulting in the output of the string "Agg"?Incorrectoptionsareshownbystrikethrough,anyoptionsyouchosearemarkedbyatick1)System.out.println(a.getFields());2)System.out.println(a.name);3)System.out.println((Base)a.getFields());4)System.out.println(((Agg)a).getFields());
Paribe, sua resposta esta certa, é o 1 mesmo. Não se esqueça do polimorfismo. ;-)
victorwss
tiago_stos:
…
Paribe, sua resposta esta certa, é o 1 mesmo. Não se esqueça do polimorfismo. ;-)
Você leu a minha resposta lá em cima?
danilopelegrino
tiago_stos:
paribe:
Olá,
uma duvida nesse exemplo pois coloquei na opção 1
pra entender melhor se o metodo existisse na classe Base seria certo....
é isso nessa condição somente da pra usar qdo Agg a = new Agg() é isso a idéia ?????
classBase{}classAggextendsBase{publicStringgetFields(){Stringname="Agg";returnname;}}publicclassAvf{publicstaticvoidmain(Stringargv[]){Basea=newAgg();//Here}}Whatcodeplacedafterthecomment//Here will result in calling the getFields method resulting in the output of the string "Agg"?Incorrectoptionsareshownbystrikethrough,anyoptionsyouchosearemarkedbyatick1)System.out.println(a.getFields());2)System.out.println(a.name);3)System.out.println((Base)a.getFields());4)System.out.println(((Agg)a).getFields());
Paribe, sua resposta esta certa, é o 1 mesmo. Não se esqueça do polimorfismo. ;-)
O victor ta certo Tiago, neste trexo:
Base a = new Agg();
Esta ocorrendo um CAST UP do objeto da classe Agg para classe Base, ou seja, ele perde as funcionalidades da classe Agg que é a classe que contem o metodo getFields. Portanto se ele tentar acessar o metodo vai dar erro.
Agora no item 4, ele esta efetuando o Cast Down do objeto a, novamente para a classe Agg, ou seja, agora ele consegue acesso aos metodos desta classe :)
Espero ter ajudado...t++ abraçooo fuiiiii
T
tiago_stos
danilopelegrino:
tiago_stos:
paribe:
Olá,
uma duvida nesse exemplo pois coloquei na opção 1
pra entender melhor se o metodo existisse na classe Base seria certo....
é isso nessa condição somente da pra usar qdo Agg a = new Agg() é isso a idéia ?????
classBase{}classAggextendsBase{publicStringgetFields(){Stringname="Agg";returnname;}}publicclassAvf{publicstaticvoidmain(Stringargv[]){Basea=newAgg();//Here}}Whatcodeplacedafterthecomment//Here will result in calling the getFields method resulting in the output of the string "Agg"?Incorrectoptionsareshownbystrikethrough,anyoptionsyouchosearemarkedbyatick1)System.out.println(a.getFields());2)System.out.println(a.name);3)System.out.println((Base)a.getFields());4)System.out.println(((Agg)a).getFields());
Paribe, sua resposta esta certa, é o 1 mesmo. Não se esqueça do polimorfismo. ;-)
O victor ta certo Tiago, neste trexo:
Base a = new Agg();
Esta ocorrendo um CAST UP do objeto da classe Agg para classe Base, ou seja, ele perde as funcionalidades da classe Agg que é a classe que contem o metodo getFields. Portanto se ele tentar acessar o metodo vai dar erro.
Agora no item 4, ele esta efetuando o Cast Down do objeto a, novamente para a classe Agg, ou seja, agora ele consegue acesso aos metodos desta classe :)
Espero ter ajudado...t++ abraçooo fuiiiii
Foi maus galera. Sinceramente nunca tinha ouvido falar de "CAST UP" e "CAST DOW" em todo tempo que estudo java, e todo exemplo que via o acesso era realizado da forma: