Java で、いくつかのフィールドとメソッドを既存のクラスに追加する方法はありますか? 私が望むのは、コードにクラスをインポートし、既存のフィールドから派生したいくつかのフィールドとそれらの戻りメソッドを追加する必要があることです。これを行う方法はありますか?
4 に答える
機能を追加したいクラスを拡張するクラスを作成できます。
public class sub extends Original{
...
}
スーパークラスのプライベート変数にアクセスするには、getter メソッドがない場合は、それらを「プライベート」から「保護」に変更して、通常どおり参照できるようにします。
それが役立つことを願っています!
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;
}
例は、拡張するクラスが final でない場合にのみ実際に適用されます。たとえば、このメソッドを使用して java.lang.String を拡張することはできません。ただし、CGLIB、ASM、または AOP を使用したバイト コード インジェクションを使用するなど、他の方法もあります。
この質問が 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 と同じ方法を説明することはできますが、ポスターには多すぎるかもしれません。彼らが望むなら、私は調査して説明することができます。