我知道在 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 很大程度上受到现实世界概念的影响。来自现实世界的例子:如果一个 child 从他/她的 parent 那里继承了一些东西,他/她继承了 parent 的状态(属性(property)、财富等,他/她不能通过增加更多的财富来覆盖这些),但他/她可以覆盖 parent 的行为(他/她如何说话、走路、理解等)。
同样,在编程中,当类继承时,它会从父类继承状态和行为。但它不能任意覆盖父级的状态,尽管它可以使用它。并且子类可以自由地覆盖父类的行为(方法)。
关于java - 为什么类字段不被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36127883/