0

インターフェースについてはかなり基本的な質問がありますが、私もかなり新しいものです。私は通常、オーバーロードされたコンストラクターを使用してクラスをインスタンス化します。私は今、インターフェースを使おうとしていますが、コンストラクターにどのようにデータを入力するのか疑問に思っています。インターフェイスでsetSomeMethod(arguement1、arguement2)のようなものを使用して、属性を設定しますか?

また、サービスインジェクションで「Tapestry5」フレームワークを使用していることにも注意してください。例

public class Main {

    @Inject
    private Bicycle bicycle;

    public Main() {
         //Not sure how to pass constructor variables in
         this.bicycle();
    }

}

インターフェース

public interface bicycle {
   public void someMethod(String arg1, String arg2);
}

実装クラス

public class MountainBike implements bicycle {

   private String arg1;

   private String arg2;

   public MountainBike() {
       //Assuming there is no way to overload this constructor
   }

   public void someMethod(String arg1, String2 arg2) {
       this.arg1 = arg1;
       this.arg2 = arg2;
   }

} 

では、拡張クラスをどのように処理しますか?拡張クラスコンストラクターにデータを設定する方法がわかりません。

public class MountainBike extends BicycleParts implements bicycle {

   private String arg1;

   private String arg2;

   public MountainBike() {
       //Assuming there is no way to overload this constructor
       //Not sure where to put super either, but clearly won't work here. 
       //super(arg1);            
   }

   public void someMethod(String arg1, String2 arg2) {
       this.arg1 = arg1;
       this.arg2 = arg2;
       //Assuming it doesn't work outside of a constructor, so shouldn't work 
       //here either.   
       //super(arg1);
   }

} 

public class BicycleParts {

    private String arg1;

    public void BicycleParts(String arg1) {
        this.arg1 = arg1;
    }

}

前もって感謝します。

4

2 に答える 2

4

まず、bicycleメソッドは戻り型で宣言する必要があります。

public void someMethod(String arg1, String arg2);

インターフェイスは、オブジェクトのインスタンス化方法ではなく、メソッドのコントラクトを定義します。また、静的変数を定義することもできます。

MountainBikeコンストラクターで使用するsomeMethodには、コンストラクターで次の呼び出しを行うことができます。

public MountainBike(String arg1, String arg2) {
   someMethod(arg1, arg2);
}

クラスの拡張に関する質問ですが、スーパーステートメントはコンストラクターの最初のステートメントとして表示される必要があります。

public class MegaMountainBike extends BicycleParts implements bicycle {

   public MegaMountainBike() {

      super("Comfy Saddle");
      // do other stuff
   }
于 2012-08-19T00:56:20.217 に答える
2

あなたは混乱しているようです。Java言語は、コンストラクターとメソッドを定義します。コンストラクターには特別な制限があり、インターフェイスに配置することはできませんnew。ステートメントを実行するたびに暗黙的に呼び出されます。コンストラクターはインターフェースに配置できないため、一般的な方法は代わりにファクトリメソッドを使用することです。

于 2012-08-19T01:03:06.890 に答える