探索继承和抽象类
继承类和抽象类是在面向对象的编程语言中找到的两个重要的编程构造。 这些概念用于在类之间创建父子关系。 继承允许子类扩展超类。 子类继承超类的所有属性和方法。 子类还可以替代从超类继承的方法的行为或向这些方法添加更多功能。
继承
为了在面向对象的编程中更好地了解继承的概念,我们来查看一个真实的示例。 在本示例中,车辆是父类。 车辆有许多不同的类型,例如:汽车、巴士和卡车。 在本情景中,车辆是父类。 汽车、巴士和卡车是从车辆继承的派生类。 车辆类具有所有车辆类型共同的特征(例如,速度、颜色和挡位)。 每种车辆类型的特征可能各不相同。 例如,卡车可能具有全轮驱动,但汽车没有。

示例
以下示例说明了类如何使用继承。 “汽车”类将扩展“车辆”类以获取高度和宽度,但也添加了乘客数量变量。
class Vehicle
{
// Instance fields.
real height;
real width;
// Constructor to initialize fields height and width.
new(real _height, real _width)
{
height = _height;
width = _width;
}
}
class Car extends Vehicle
{
// Additional instance field numberOfPassengers. Fields height and width are inherited.
int numberOfPassengers;
// Constructor is overridden to initialize numberOfPassengers.
new(real _height, real _width, int _numberOfPassengers)
{
// Initialize the fields.
super(_height, _width);
numberOfPassengers = _numberOfPassengers;
}
}
抽象
抽象类由关键字抽象标识。 它们无法实例化,而是需要从抽象类继承的子类。 抽象类用于实现一个概念,然后由子类完成。 抽象方法也可以在抽象类中声明。 抽象方法不允许在方法中使用代码或声明。 子类必须扩展抽象类才能使用抽象方法。
示例
以下是抽象类的示例。 “汽车”类扩展抽象类“车辆”。 这允许“汽车”类替代 printInfo() 方法,并允许您将功能添加到抽象类中未包含的 operate() 方法。
abstract class Vehicle
{
str owner;
int age;
void printInfo()
{
Info(strfmt("%1, %2",owner, age));
}
abstract void operate()
{
}
}
class Car extends Vehicle
{
str model;
void printInfo()
{
// overriding default functionality
Info(strfmt("%1, %2, %3",owner, age, model));
}
void operate()
{
Info('running');
}
}