web-dev-qa-db-fra.com

Comment convertir un parent en enfant dans Java

je fais ceci:

Child child = (Child)parent;

Ce qui me donne une erreur, j'ai trouvé qu'il n'était pas possible de le faire comme ça. Je ne sais pas exactement pourquoi, mais je pense que cela devrait être possible, si la classe Child hérite de la classe Parent, elle contient les données d'objet Parent.

Mes questions sont:

  • Pourquoi ça ne marche pas?


  • Comment puis-je faire fonctionner cela, sans définir l'attribut de chaque parent comme celui-ci

:

class Parent{
    public int parameter1;//...
    public int parameter1000;
}

class Child extends Parent
{
    public Child(Parent parent)
{
        this.parameter1 = parent.parameter1;//...
        this.parameter1000 = parent.parameter1000;
}
}
5
likaa

Eh bien, vous pouvez simplement faire:

Parent p = new Child();
// do whatever
Child c = (Child)p;

Ou si vous devez commencer avec un objet Parent pur, vous pouvez envisager d'avoir un constructeur dans votre classe parent et d'appeler:

class Child{
    public Child(Parent p){
        super(p);
    }
}
class Parent{
    public Parent(Args...){
        //set params
    }
}

Ou le modèle de composition:

class Child {
    Parent p;
    int param1;
    int param2;
}

Vous pouvez directement définir le parent dans ce cas.

Pour ce faire, vous pouvez également utiliser Apache Commons BeanUtils. En utilisant sa classe BeanUtils, vous avez accès à de nombreuses méthodes utilitaires pour remplir les propriétés JavaBeans via la réflexion.

Pour copier toutes les propriétés communes/héritées d'un objet parent dans un objet de classe enfant, vous pouvez utiliser sa méthode copyProperties () statique comme:

BeanUtils.copyProperties(parentObj,childObject);

Notez cependant qu'il s'agit d'une opération lourde.

6

Vous pouvez utiliser json util pour ce faire, comme fastjson.

Child child = JSON.parseObject(JSON.toJSONString(parent), Child.class);
0
Edye Chan

changez 'this' en 'super' dans votre constructeur enfant et supprimez le paramètre parent, remplacez-le à la place par les deux paramètres int parameter1; // ... int parameter1000; :)

class Parent{
public int parameter1;//...
public int parameter1000;
}

class Child extends Parent
{
    public Child(int parameter1, int parameter1000)
    {
        super.parameter1 = parameter1
        super.parameter1000 = parameter1000;
    }
}
0
Stephan-MDD