我知道在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在很大程度上受现实世界概念的影响。举一个真实的例子:如果孩子从父母那里继承了某些东西,他/她将继承父母的状态(财产,财富等,他/她不能通过增加更多的财富来替代),但是他/她可以超越父母的行为(他/她如何说话,走路,理解等)。
同样,在编程中,当类继承时,它从父类继承状态和行为。但是,尽管可以使用它,但它不能任意覆盖父状态。子类具有覆盖父项行为(方法)的自由。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句