スーパークラスまたはサブクラスのオブジェクトをメソッドに送信する必要があるコードを扱っています。
このメソッドpublic void repair(Vehicle vehicle)
は、スーパー クラス オブジェクトのメソッドにのみアクセスします。
public class Vehicle {
//class stuff
}
public class Car extends Vehicle {
//class stuff
}
public static void main(String[] args)
{
// do stuff to determine whether working with a vehicle or car
if (someCondition)
{
Car = new Car();
// do some stuff...
repair(Car);
}
else
{
Vehicle = new Vehicle();
// do some stuff...
repair(Vehicle);
}
}
3つのオプションがあると思います:
- コードはそのままにしておいてください。動作しているようです。- 私はこのオプションが好きではありません。仮定をしているように感じます。これを行うと、車のみのメソッドが誤って呼び出され、予期しない動作につながる可能性があるのではないかと思います。
- car に getVehicle() メソッドを作成して、Vehicle を返します。次に使用します
repair(Car.getVehicle());
-これは少し気分が良くなります - タイプのメソッドのみを実行できるオブジェクト(車両)を作成すると私が信じている
Car = new Car();
変更。Vehicle = new Car();
- 予期しない動作を防ぐために、できることを制限しているので、これが最も安全だと感じています。
修復方法が車両のみを想定していることを考えると、3 が最善のアプローチでしょうか?
また、public void repair(Vehicle vehicle)
メソッド宣言に対してできる/すべきことはありますか?
編集:私は使用する必要があるようです:
コードはそのまま
いずれにせよ、repair()
メソッドはサブクラス オブジェクトをスーパークラス オブジェクトにキャストするためです。