web-dev-qa-db-ja.com

Java:既存のクラスにフィールドとメソッドを追加しますか?

Javaで、既存のクラスにいくつかのフィールドとメソッドを追加する方法はありますか?私が欲しいのは、コードにインポートしたクラスがあり、既存のフィールドから派生したいくつかのフィールドとその戻りメソッドを追加する必要があるということです。これを行う方法はありますか?

29
user1880174

機能を追加したいクラスを拡張するクラスを作成できます:

public class sub extends Original{
 ...
}

スーパークラスのプライベート変数にアクセスするには、ゲッターメソッドがない場合、「プライベート」から「保護」に変更し、通常どおり参照できるようにします。

お役に立てば幸いです!

5
awolfe91

Javaでクラスを拡張できます。例えば:

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

これで、BのインスタンスがAのパブリックフィールドにアクセスできます。

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

より詳細なチュートリアルについては、 継承(Javaチュートリアル> Learning the Java Language> Interfaces and Inheritance) をご覧ください。

Edit:クラスAに次のようなコンストラクタがある場合:

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

クラスBには次のものがあります。

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

例は、拡張するクラスがfinalでない場合にのみ実際に適用されます。たとえば、このメソッドを使用してJava.lang.Stringを拡張することはできません。ただし、CGLIB、ASMまたはAOPを使用したバイトコードインジェクションの使用など、他の方法もあります。

2
user924272