Ola a todos,
Alguem ja tentou utilizar a clausula super() dentro de um metodo, depois
criar uma nova classe herdando a que implementou o metodo e chamar este
metodo a partir desta nova classe ? Por exemplo :
public class Obj {
public int toPersistent() {
//nenhum codigo aqui, usada apenas para n�o gerar erro de compilacao no
metodo toPersistent da classe Obj por causa do uso da clausula super()
return 0;
}
}
public class Resource extends Obj {
public int ID; //sem usar encapsulamento para facilitar o exemplo
public int toPersistent() {
//o codigo da rotina de persistencia � todo implementado aqui !!!
//a ideia � implementar toda a rotina de persistencia uma unica vez
//e utiliza-la para todas as classes filhas sem reimplementar novamente
para cada filho
//utilizando o mecanismo de reflexao para descobrir os campos da
//instancia do filho onde foi invocada e usando o super() para
//persistir a classe exatamente superior antes de persistir a si mesmo
//por causa da integridade referencia usada no RDBMS.
if (...) // Se o metodo esta sendo executado dentro de qualquer filho
int idSuper = super(); //persistente o pai antes de persistir a si
mesmo
}
// rotina de gravacao desta instancia aqui !!!
return idThis; //retorna o ID desta instancia dentro do DB usado na
gravacao do filho para efeito de integridade referencial
}
}
public class Person extends Resource {
public String Nome; //sem usar encapsulamento para facilitar o exemplo
}
public class Employ extends Person {
public String Depto;
}
...
Employ e = new Employ();
e.ID = 100;
e.Nome = "Billy Joy";
System.out.println("ID???:"+e.toPersistent());
...
Conclusao...
Segundo o conceito de heranca (se eu estiver errado por favor me
corrijam...), um metodo herdado deve se comportar como se ele estive sido
implementado fisicamente dentro da classe, sendo transparente para o
usuario os detalhes e a classe onde foi fisicamente implementado.
Li em algum lugar que a JVM trabalha com "ligamento dinamico", no caso de
polimorfismo e heran�a para determinar qual ou onde o metodo deve ser
chamado em runtime, porem neste caso isso n�o funcionou para super() pois
independente de onde se chame o metodo a clausula super assume como
referencia a classe onde foi fisicamente implementada, neste caso a
classe "Resource", desta forma n�o consegui fazer com que super() se
referencie a classe pai de onde esta sendo invocada.
Pelo que entendi o compilador faz uma ligacao fisica do filho com a classe
pai no caso da clausula super() (e no restante uma ligacao dinamica !?!?),
isso faz com que a resolucao da clausula super pela JVM tome como
referencia o metodo onde foi implementado e n�o de onde foi invocada para
determinar quem � o pai da classe onde o metodo esta sendo invocado !!!!
Ser� que isso � pra ser assim mesmo ou temos ai talvez uma falha de
conceito, ou talvez um bug do compilador...
Alguem poderia comentar o assunto ?
Alessandro.
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------