を上書きせずに私は現在、Javaで2つのクラスを設計していますし、相続の私の現在の問題を理解した上で、いくつかの問題を抱えていますので、私はそれを期待して、簡単なコード例を作成しました誰かが私が何が起こっているのか理解するのを助けることができるは、子クラスの変数で親クラスのメソッドを使用して
この例では、親クラス(一般的にはCarクラス)と子クラス(クラスRedCar)があります。親クラスは抽象であり、属性距離を含み、入力引数時間(double)をとり、距離を時間で割った二倍の値(つまり速度を与える)を返すcomputeVelocityのメソッドを含んでいます。
子クラスには、RedCar(double inputDistance)というコンストラクターがあります。また、computeVelocityメソッドにもアクセスし、オーバーライドする必要はありません。
ここに問題があります。論理的には、computeVelocityは、RedCarからinputDistance変数を取るべきではないことを理解しています。なぜなら、それは別のクラスのメソッドを呼び出すためです。しかし、私が知りたいことは、そのメソッドをRedCarクラスに持っていかれ、そのクラス内で引数をコンストラクタに渡して使用できることです。ここで
あなたにコメントの一部で述べたように、コード
//Car Class
public abstract class Car{
//abstract variable
private double distance;
//compute velocity method
public double computeVelocity(double time){
return distance/time;
}
}
//RedCar Class
public class RedCar extends Car{
public double distance;
public RedCar (double inputDistance){
this.distance = inputDistance;
}
//This is currently my method but I believe this already constitutes as overridding
public double computeVelocity(double hours){
Car.super.computeVelocity(hours);
}
}
それはあなたがここで何をしようとして私には本当にはっきりしない、または、なぜこの方法がまったく上書きする必要があります。オーバーライドは何も追加しないので、なぜそれを持っているのですか?なぜ、基本クラスの '' computeVelocity'メソッドを使うのではないのですか? – David
サブクラスに2番目の距離フィールドを設定しないでください。ところで、基本クラスの距離フィールドは常に0です。基本クラスの距離を引数として保護されたコンストラクタを作成し、サブクラスのコンストラクタから(super(distance)を使用して)それを呼び出します。 –