Herança - alterando a superclasse

Salve.

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;
}

Obrigado.

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?

Nao endendi… Pq vc quer isso?

Com super voc}e faz referência a um outro objeto, mas sim às características (atributos e métodos) da classe pai.

Isso serve para acessar métodos que foram sobrescritos ou sobrecarregados.

[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.

Cara, não existe isso que você quer fazer, joga rum objeto para o super de outro.

A única forma de se fazer isso é com composição e delegação de métodos. O Eclipse gera os métodos delegate para você.

E se só a delegação não resolver seus problemas, lembre-se que existe o BeanUtils da jakarta, ok :wink: !

Fallow

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.

Ou entao voce pode fazer, conforme o caso:

// permitido pois Monza extends Veiculo
caminhao = monza;
carro = monza;

Marcio Kuchma

Valeu.
Entendi os conceitos e estou usando decomposição para resolver o problema.

Obrigado.