【6.面向对象编程】3.继承

3.继承

所有面向对象的编程语言都允许用户从现有的一个类出发来定义一个新的类。这项技术就叫做继承。继承是面向对象语言最重要的特性之一。继承最突出的特点就是代码的可重用性。

继承是指把一个新的类定义为已经存在的类的后代。新类继承父类的大部分内容,也可以添加新的内容。父类的字段和方法存在于子类中,子类继承父类的属性、字段、方法和事件。子类还可以添加新的成员。

生活中的继承:

 

在上面的图中,兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。在继承关系中,父类更通用,子类更具体。虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。

下面在Delphi中描述这种关系:

Type
  TAnimal = Class(TObject)
  private
    id: integer;
    name: string;
    age: integer;
  public
    constructor Create(_id: integer; _name: string; _age: integer);
    procedure SetId(_id: integer);
    procedure SetName(_name: string);
    procedure SetAge(_age: integer);
    function GetId(): integer;
    function GetName(): string;
    function GetAge(): integer;
    procedure eat();
  End;
​
  Constructor TAnimal.Create(_id: integer; _name: string; _age: integer);
  begin
    id := _id;
    name := _name;
    age := _age;
  end;
  procedure TAnimal.SetId(_id: Integer);
  begin
    id := _id;
  end;
  procedure TAnimal.SetName(_name: string);
  begin
    name := _name;
  end;
  procedure TAnimal.SetAge(_age: Integer);
  begin
    age := _age;
  end;
  function TAnimal.GetId;
  begin
    GetId := id;
  end;
  function TAnimal.GetName;
  begin
    GetName := name;
  end;
  function TAnimal.GetAge;
  begin
    GetAge := age;
  end;
  procedure TAnimal.eat;
  begin
    writeln('正在吃......');
  end;
​
Type
  TPenguin = class(TAnimal)
  public
    procedure eat();
  end;
​
  procedure TPenguin.eat;
  begin
    writeln(name + '正在吃......');
  end;
​
​
Type
  TMouse = class(TAnimal)
  public
    procedure eat();
  end;
​
  procedure TMouse.eat;
  begin
    writeln(name + '正在吃......');
  end;
​
​
var
  a: TAnimal;
  p: Tpenguin;
  m: Tmouse;
​
begin
  a := TAnimal.Create(0, '动物',  1);
  p := TPenguin.Create(1, '企鹅', 2);
  m := TMouse.Create(2, '老鼠', 1);
  a.eat;
  p.eat;
  m.eat;
end.

运行结果:

正在吃......
企鹅正在吃......
老鼠正在吃......

在上面的代码中,定义了TAnimal类,其父类是TObject,包括3个属性、1个构造函数和7个方法。接下来在定义子类的时候就变得相对简单多了,只需要定义子类中的内容,本例在子类中只是对 eat 方法进行了重写。

继承有很多优点,但也有缺点,比如:对于父类中的字段,如果子类不需要怎么办?可以说没有办法,只能不去使用它就可以了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janeb1018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值