我知道在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();
}
}
答案 0 :(得分:2)
正如您所提到的,这些语言是基于OOP的,OOP受现实世界概念的影响很大。从一个现实世界的例子:如果一个孩子从他/她的父母那里继承了某些东西,他/她继承了父母的状态(财产,财富等,他/她不能通过增加更多的财富来覆盖),但他/她可以覆盖他们的父母&# 39;行为(他/她如何说话,走路,理解等)。
类似地,在类继承的编程中,它从parent继承状态和行为。但它不能任意覆盖父母的状态,尽管它可以使用它。并且子类可以自由地覆盖父母的行为(方法)。
答案 1 :(得分:0)
是的,以这种格式,它看起来真的很迷惑,但思考语言的工作方式有点帮助。
例如,大多数时候我们都会分配特定于类的toString-method,尽管我们可以愉快地使用父类Object(统治它们的那个!)定义给我们。然而,大多数时候,Object的toString-method并不适合我们的目的,我们编写了不同类型的toString-method,它们更适合我们的类。
虽然在代码中没有像在你的例子中那样清楚地显示它,但它实际上是整个语言的工作方式。子类继承父类方法,如果它不按照预期的方式对它们起作用,则会覆盖它们以更好地适应类的目的。在我们自己编写的课程中,IMO比使用激动课程时更加清晰。
当然,您可以尝试以不需要覆盖自己的类的方式来规划类,但是让父类定义一些泛型方法然后在需要时更具体地定义它们会更有效。