-1
public abstract class Vehicle {

       public void drive(){
          spinTheWheels(subclass.getNumWheels());
       }

       public void spinTheWheels(int wheelsTotal){
          ....
       }
}

public class Car extends Vehicle {
     private final int numWheels = 4;

    ...
}

上記の例では、車両内の Car から numWheels を参照したいと考えています。これはどのように可能ですか?

4

2 に答える 2

0

これは不可能です。基本クラスは、サブクラスの内部が何であるかを決して知りません。これは主に、継承された場所がわからないためです。これは、継承が同様に機能するはずの方法によるものです。サブクラスは、基本クラスの動作を追加または変更することになっています。基本クラスには、基本的な動作と必要なプロパティが含まれている必要があります。

編集:OPのコメントを明確にするために追加されたコンテンツ。

基本クラスに車輪数のメソッドを持たせたい場合、おそらくこれは NumberOfWheels と呼ばれるメンバ プロパティまたは vairable の存在を知る必要があります。この場合、ベースの Vehicle クラス内でこれを宣言する必要があります。この変数を派生クラスで宣言して、基本クラス内で使用することはできません。

ここには 2 つのオプションがあることがわかります。

  1. 基本クラスで、GetNumberOfWheels メソッドを抽象化または仮想化し、派生クラスに強制的に使用させます。この場合、派生クラスには変数がある場合とない場合がありますが、このメソッドの実装が強制されます。たとえば、派生クラスの 1 つは、車輪数変数を持たない HoverCraft である可能性があります。GetNumberOfWheels メソッドは、実装の必要性に基づいて、0 を返すか、例外をスローすることができます。
  2. これはよりクリーンな方法であるため、私はこれを好みます。車輪数プロパティと GetNumberOfWheels メソッドを持つインターフェイスを持つことができます。子クラスにこれを実装するよう強制します。各派生クラスは、プロパティとメソッドの独自の実装を提供でき、必要に応じて使用できます。
于 2012-11-23T18:12:55.317 に答える