web-dev-qa-db-fra.com

Java: ajouter des champs et des méthodes à une classe existante?

Existe-t-il, en Java, un moyen d'ajouter des champs et des méthodes à une classe existante? Ce que je veux, c'est que j'ai une classe importée dans mon code, et je dois ajouter des champs, dérivés des champs existants, et leurs méthodes de retour. Est-ce qu'il y a un moyen de faire ça?

29
user1880174

Vous pouvez créer une classe qui étend celle à laquelle vous souhaitez ajouter des fonctionnalités:

public class sub extends Original{
 ...
}

Pour accéder à l'une des variables privées de la superclasse, s'il n'y a pas de méthodes getter, vous pouvez les faire passer de "privé" à "protégé" et pouvoir les référencer normalement.

J'espère que cela pourra aider!

5
awolfe91

Vous pouvez étendre des classes en Java. Par exemple:

public class A {

  private String name;

  public A(String name){
    this.name = name;
  }

  public String getName(){
    return this.name;
  }

  public void setName(String name) {
    this.name = name;
  }

}

public class B extends A {
  private String title;

  public B(String name, String title){
    super(name); //calls the constructor in the parent class to initialize the name
    this.title= title;
  }      

  public String getTitle(){
    return this.title;
  }

  public void setTitle(String title) {
    this.title= title;
  }
}

Désormais, les instances de B peuvent accéder aux champs publics dans A:

B b = new B("Test");
String name = b.getName();
String title = b.getTitle();

Pour un didacticiel plus détaillé, jetez un œil à Héritage (Le Java Tutoriels> Apprentissage du Java Langue> Interfaces et héritage) .

Edit: Si la classe A a un constructeur comme:

public A (String name, String name2){
  this.name = name;
  this.name2 = name2;
}

alors dans la classe B vous avez:

public B(String name, String name2, String title){
  super(name, name2); //calls the constructor in the A 
  this.title= title;
}
3
Jacob Schoen

Les exemples ne s'appliquent vraiment que si la classe que vous étendez n'est pas définitive. Par exemple, vous ne pouvez pas étendre Java.lang.String à l'aide de cette méthode. Il existe cependant d'autres moyens, comme l'utilisation de l'injection de code octet à l'aide de CGLIB, ASM ou AOP.

2
user924272