o que acontece quando se compilar e executar esse codigo?
public class Teste{
public static void main(String args[]){
Y y = new Y();
X x = y;
System.out.println(x.toString());
}
}
interface X{
public void fazAlgo();
}
class Y implements X{
public void fazAlgo(){
System.out.println("fazAlgo");
}
public String toString(){
return "Calss Y";
}
}
vai imprimir o resultado do toString da interface.como ta implementado, vc so tem acesso aos metodos da classe que foram sobrescritos.toString não ta definido na interface, então quando vc coloca o objeto y dentro de x, vc so vai enxergar da classe y o metodo fazAlgo.
a chamada a toString vai usar o metodo do objeto x.
é isso??
vai imprimir o resultado do toString da interface.como ta implementado, vc so tem acesso aos metodos da classe que foram sobrescritos.toString não ta definido na interface, então quando vc coloca o objeto y dentro de x, vc so vai enxergar da classe y o metodo fazAlgo.
a chamada a toString vai usar o metodo do objeto x.
é isso??
o resultado sera “Calss Y” (era pra ser Class, hehehe, mas teve um erro de digitacao)
pq a interface garante para o compilador que os metodos que ela declara existirao no objeto instanciado, apesar do metodo toString() nao estar definido na interface, o codigo compila, pq o metodo toString() esta definido na classe Object, e como todas as classes extendem a Object entaum eh garantido que a o objeto tera o metodo toString()…
perfeitamente valido, pois y eh um objeto de uma classe q implementa
a interfaxe X. … lembrando q posso fazer
Collection coll = new ArrayList();
ja q ArrayList implementa Collection…
A Interface X, diz q devemos implementar o metodo
Entao qq outro metodo eh especifico de Y,
porem como toda classe extends de Object, ela
tera acesso a toString, e como a interface x eh um instancia de y,
logo ela ira buscar a implementacao feita em y…
como houve uma sobreescrita do metodo toString, ira ser feita o
que o toString em Y faz …, q eh imprimir “Calss Y”.