Tenho a classe A e a subclasse B que extends a classe A. Após criar um objeto x que representa a classe B e outro y que reprenta a classe A quero fazer com que a superclasse do objeto x seja a A. Existe alguma forma de se fazer isso?
class A{
}
class B extends A{
}
class Main{
A x = new A();
B y = new B();
//seria algo do tipo
y.super = x;
}
[quote=Diogenes]Mas wendell, a classe A jah eh a superclasse de B…
Vc quer q uma instancia específica seja a superclasse de determinado objeto?
Não sei se eh isso, mas acho q vc poderia usar composição pra isso…
Daria pra esclarecer um pouco mais sua dúvida?
[/quote]
Sim, eu quero uma q uma instância específica seja a superclasse. Como funciona a composição?
Na verdade eu crio o objeto da Classe A e carrego o seus atributos. Após isso tenho a necessidade de ter um objeto da classe B com os mesmos valores carregados anteriormente no objeto A. Como eu não posso converter A em B, tenho que usar os métodos para carregar os valores novamente em B. Em vez de ficar usando os métodos para copiar os valores de A para B eu queria aproveitar a mesma instância do objeto A.
Você já se deu conta que os objetos de B podem receber os mesmo valores que os de A?
Mas parece que você quer ter um objeto do tipo A e depois tratá-lo como do tipo B. Para isso você terá mesmo que usar composição e delegação de métodos.
Exemplo:
[code]public class A {
private String aa;
public String getAa() {
return aa;
}
public void setAa( String aa ) {
this.aa = aa;
}
}[/code]
[code]public class B extends A {
private A a;
private String bb;
public B( A a ) {
}
public String getBb() {
return bb;
}
public void setBb( String bb ) {
this.bb = bb;
}
public void setAa( String aa ) {
a.setAa( aa );
}
public String getAa() {
return a.getAa();
}
}[/code]
A a = new A();
a.setAa( "um valor" );
B b = new B( a );
System.out.println( b.getAa() );
[quote=danieldestro]Mas parece que você quer ter um objeto do tipo A e depois tratá-lo como do tipo B. Para isso você terá mesmo que usar composição e delegação de métodos.
[/quote]
Podemos dizer q eu quero q um objeto seja filho de um pai, mas posteriormente seja adotado por outro.
public class A{
String pai;
//get e set
}
public class B{
String filho;
//get e set
}
public Main{
A a = new A();
a.setPai ("João");
B b = new B();
b.setPai("José");
b.setFilho( "Junior");
//Agora o pai do Junior deve ser o João
b.setPai( a.getPai );
//se fosse possível
b.super = a;
}
Imagine q eu tenha 20 atributos na superclasse. O trabalho seria enorme.
Na forma proposta de composição o reaproveitamento dos métodos da superclasse não ocorre, pois tenho q sobresceve-los.
Esse conceito na verdade nao existe. Voce nao tem objetos “filhos” de outros objetos e vice-versa. O que voce tem sao CLASSES filhas de outras e vice-versa.
A unica relacao entre um objeto de uma superclasse e um objeto de uma subclasse dela eh que ambos sao instancias de classes que estao na mesma hierarquia. Nao quer dizer que um tenha alguma relacao com o outro.
// caminhao eh um tipo de veiculo
Veiculo caminhao = new Veiculo();
caminhao.setQtdeRodas(8);
// carro tambem eh um tipo de veiculo
Veiculo carro = new Veiculo();
carro.setQtdeRodas(4);
// Monza extends Veiculo
Monza monza = new Monza();
monza.turnOnAlarme();
// que relacao tem "monza" com "caminhao" ou "carro"?
// apenas suas classes sao relacionadas: Monza extends Veiculo
O que voce talvez queira seja copiar as propriedades de um objeto para um objeto de sua superclasse, certo? Crie um processozinho que faca isso via reflexao ou use o BeanUtils do Jakarta, conforme ja indicaram.