我知道在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受现实世界概念的影响很大。举一个真实的例子:如果孩子从父母那里继承了某些东西,他/她将继承父母的状态(财产,财富等,他/她不能通过增加更多的财富来替代),但是他/她可以超越父母的行为(他/她如何说话,行走,理解等)。

同样,在编程中,当类继承时,它从父类继承状态和行为。但是,尽管可以使用它,但它不能任意覆盖父状态。子类具有覆盖父项行为(方法)的自由。

09-12 15:16