这是我在 StackOverflow 上的第一个问题...我是一名前文学士,正在学习如何成为一名初级开发人员(8 周),所以请温柔点 ;-)
我正在尝试学习继承,但我不确定我是否正确理解了这个概念。
我正在尝试创建一个简单的模型。一辆车辆只能有 1 个“VehicleType”,并且“VehicleType”就是一辆车辆。因此,我创建了一个基类“车辆”和三个派生类“自行车”、“汽车”和“卡车”。
当我创建派生类时,是否可以强制该类的某些变量始终相同,而不是纯粹依赖构造函数?例如。自行车的“numberOfWheels”总是 2,汽车的“numberOfWheels”总是 4。我是否可以强制声明这一点,或者我总是必须在构造函数中声明它们?如果我有多个特定于该类的变量,那么必须单独声明它们并冒着错误的风险似乎是违反直觉的,当我情不自禁地认为动态地执行它会容易得多时......但我可以'找不到任何关于这个的东西-哎呀。这表明我可能误解了?
我希望我的问题有意义,但如果没有,请耐心等待。学习说“开发”语言几乎和编码一样困难!
尚无代码可显示
欢迎来到该网站。我认为这是一个很好的问题,它说明了面向对象编程的一些最强大的功能。
abstract
类和属性可用于完成您正在寻找的内容。给出一个简洁的代码示例:
public enum VehicleType
{
Car,
Truck,
Airplane,
Spaceship
}
public abstract class Vehicle
{
public abstract VehicleType Type { get; }
}
public class Car : Vehicle
{
public override VehicleType Type => VehicleType.Car;
// Properties and methods specific to Car
}
public class Airplane : Vehicle
{
public override VehicleType Type => VehicleType.Airplane;
// Properties and methods specific to Airplane
}
abstract
表示派生类必须通过重写来实现缺少的成员。因此,对于 Vehicle
的每个子类,在本例中,您被迫重写 Type
并返回 VehicleType
值之一,因此不必依赖构造函数(或可能无意中被调用的成员)其他地方改变)。这是我经常使用的常见模式和技术。