JavaクラスとC#クラスでは、フィールドがオーバーランではないことがわかりましたが、メソッドではそうです。私はその事実を知っていますが、そのような実装の理由は何か分かりません。それは予測可能で明白ではありません。なぜ私たちはOOPのそのような実装を持っていますか?クラスフィールドがオーバーライドされない理由
public class Flight {
int seats = 150;
}
public class CargoFlight extends Flight {
int seats = 12;
}
CargoFlight f1 = new CargoFlight();
System.out.println(f1.seats);
Flight f2 = new CargoFlight();
System.out.println(f2.seats);
そして:
class Flight
{
public int Seats = 150;
}
class CargoFlight : Flight
{
public int Seats = 20;
}
class Program
{
static void Main(string[] args)
{
CargoFlight f1 = new CargoFlight();
Console.WriteLine(f1.Seats);
Flight f2 = new CargoFlight();
Console.WriteLine(f2.Seats);
Console.ReadLine();
}
}
オーバーライドは、* state *ではなく* behavior *を特化するためのものです。 2つの変数を別々に宣言するのは変わりますが、1つの状態IMOで終わるのは変です。あなたが本当に探しているのは、既存の州への割り当てです。これは簡単に達成できます。 –
これはどのように上書きされますか?あなたは単に新しい値を割り当てているだけです...私たちは一般に、派生クラスのdiff動作をしたいので、ビヘイビアをオーバーライドします...クラスのメソッドにビヘイビアを関連付けることができます... – Viru
'新しい値を割り当てるだけです。あなたはやっている。あなたは* 2つの異なるフィールドを宣言しています。必要に応じて、新しい値を割り当てることができます。それを止めるものは何もありません。 – sisyphus