java - 为什么类字段不被覆盖

标签 java c# oop

我知道在 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/

相关文章:

Java SSL 重新协商(从 SSL 到清除 channel )

c# - VS2010代码分析及CA1800 : Microsoft Performance

c# - Pin 支付 API - "Authentication failed because remote party has closed the transport stream"

oop - 通过 Scala 中的返回类型重写方法,oop 解决方案?

Java绘图程序

java - 如何使用 Java/Tomcat 在 Azure 上设置 SSL

java - Protege-OWL : java. lang.NoClassDefFoundError

c# - nhibernate HbmMapping 到 Xml

c# - 在 C# 中,有没有办法让类使用接口(interface)或抽象类定义字段?

python - 是否记录了通过实例访问类变量?