38

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

4

4 に答える 4

7

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

public class sub extends Original{
 ...
}

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

それが役立つことを願っています!

于 2012-12-05T19:31:46.727 に答える
4

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 チュートリアル > Java 言語の学習 > インターフェイスと継承) を参照してください。

編集:クラス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;
}
于 2012-12-05T19:33:19.830 に答える
2

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

于 2013-11-13T19:37:37.663 に答える
-4

この質問が C# 拡張メソッドまたは JavaScript プロトタイプに相当するものについて尋ねていると仮定すると、技術的には、Groovy が多くのことを行う 1 つのこととして可能です。Groovy は Java をコンパイルし、任意の Java クラス (最終的なものも含む) を拡張できます。Groovy には、次のようなプロパティとメソッド (プロトタイプ) を追加するための metaClass があります。

// Define new extension method
String.metaClass.goForIt = { return "hello ${delegate}" }

// Call it on a String
"Paul".goForIt() // returns "hello Paul"

// Create new property
String.metaClass.num = 123

// Use it - clever even on constants
"Paul".num // returns 123
"Paul".num = 999 // sets to 999
"fred".num // returns 123

Groovy と同じ方法を説明することはできますが、ポスターには多すぎるかもしれません。彼らが望むなら、私は調査して説明することができます。

于 2016-05-14T22:10:49.010 に答える