我知道在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();
}
}
最佳答案
正如您所提到的,这些语言是基于OOP的,并且OOP受现实世界概念的影响很大。举一个真实的例子:如果孩子从父母那里继承了某些东西,他/她将继承父母的状态(财产,财富等,他/她不能通过增加更多的财富来替代),但是他/她可以超越父母的行为(他/她如何说话,行走,理解等)。
同样,在编程中,当类继承时,它从父类继承状态和行为。但是,尽管可以使用它,但它不能任意覆盖父状态。子类具有覆盖父项行为(方法)的自由。