Ich weiß, dass in Java und C# -Klassen die Felder nicht überschrieben werden (aber die Methoden tun). Ich weiß diese Tatsache, aber ich verstehe nicht, was der Grund für eine solche Implementierung ist. Es ist nicht vorhersehbar und offensichtlich. Warum haben wir eine solche Implementierung von OOP?Warum Klassenfelder nicht überschrieben werden
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);
Und:
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();
}
}
Overriding ist für die Spezialisierung * Verhalten *, nicht * State * bestimmt. Es wäre komisch, zwei Variablen separat zu deklarieren, aber nur mit einem Stück Staat, IMO, zu enden. Was Sie wirklich suchen, ist eine * Zuweisung * zum bestehenden Zustand, und das ist leicht zu erreichen. –
Wie ist das Überschreiben ?? Sie vergeben nur neue Werte ..... wir überschreiben normalerweise Verhalten, weil wir oft Diff-Verhalten für abgeleitete Klassen wollen ... Sie können Verhalten mit Methoden in Klasse verknüpfen ... – Viru
'nur neue Werte zuweisen' - das ist nicht was Sie gehen. Sie * deklarieren * 2 verschiedene Felder, eines schattiert das andere. Wenn Sie möchten, können Sie einen neuen Wert zuweisen. Da gibt es nichts zu stoppen. – sisyphus