zoukankan      html  css  js  c++  java
  • 子类和父类间的相互调用关系

     1unit Unit1;
     2
     3interface
     4
     5type
     6  TForm1 = class(TForm)
     7    Button1: TButton;
     8    Button2: TButton;
     9    procedure Button1Click(Sender: TObject);
    10    procedure Button2Click(Sender: TObject);
    11  private
    12    { Private declarations }
    13  public
    14    { Public declarations }
    15  end;
    16
    17implementation
    18  uses
    19   Person, ET;  //引用自定义的两个类
    20procedure TForm1.Button1Click(Sender: TObject);
    21 VAR
    22  tulater: TPerson;
    23begin
    24  tulater := TPerson.Create; //Blood此时初始化为'O'
    25  tulater.myName := '涂磊';
    26  tulater.High := 156;
    27  //tulater.DNA := 'asdfwefkooj3249rrj9';
    28//上面一行错://Protected属性在此单元内(属性定义的单元)和子类属性定义的单元内可见 和直接访问使用 DNA
    29
    30  tulater.setDNA('asdfwefkooj3249rrj9');
    31//只能以上面方法间接访问Protected属性,通过public的方法
    32 // tulater.Blood := 'O';
    33//上面一行错://Private属性只在Blood属性定义的单元内可见,和直接访问使用 Blood
    34  ShowMessage(tulater.myName + #13#10 + '身高= ' + IntToStr(tulater.High) + #13#10 + '血型= ' + tulater.getBlood
    35  + #13#10 + 'DNA= ' + tulater.getDNA);
    36  tulater.Free;
    37end;
    38
    39procedure TForm1.Button2Click(Sender: TObject);
    40 VAR
    41  ETfish: TET;
    42begin
    43  ETfish := TET.Create;
    44  ETfish.myName := '外星鱼';
    45  ETfish.High := 15;
    46  //ETfish.DNA := 'asdfwe$%#%#%%Q#%%#%24#9rrj9';
    47  ETfish.setDNA('asdfwe$%#%#%%Q#%%#%24#9rrj9');
    48 // ETfish.Blood := 'O';
    49  ShowMessage(ETfish.myName + #13#10 + '身高= ' + IntToStr(ETfish.High) + #13#10 +
    50  '血型= ' + ETfish.getBlood  + #13#10 +
    51  'DNA= ' + ETfish.getDNA + #13#10 +
    52  'UFOSpeed= ' + IntToStr(ETfish.getUFOSpeed) ) ;
    53  ShowMessage('初始化时 UFOSpeed=' + IntToStr(ETfish.getUFOSpeed));
    54  ETfish.setUFOSpeed(41458174);
    55  ShowMessage('现在 UFOSpeed=' + IntToStr(ETfish.getUFOSpeed));
    56
    57  ETfish.Free;
    58end;
    59
    60end.
    61
    62

     1unit ET;  //TET类声明所在单元
     2interface
     3  uses
     4   CLASSES,Dialogs,Person;
     5TYPE
     6  TET = CLASS(TPerson) //完全继承Person所有的属性和方法
     7  private         //加入子类新的属性和方法
     8    UFOSpeed: Integer;
     9    { Private declarations }
    10  public
    11    CONSTRUCTOR Create;
    12    PROCEDURE setUFOSpeed(aSpeed: Longword);
    13    FUNCTION getUFOSpeed: Longword;
    14    { Public declarations }
    15  end;
    16implementation
    17
    18FUNCTION TET.getUFOSpeed: Longword;
    19BEGIN
    20    result := self.UFOSpeed;     //读取Private 成员的值
    21end;
    22
    23PROCEDURE TET.setUFOSpeed(aSpeed: Longword);
    24BEGIN
    25   self.UFOSpeed := aSpeed;   //以参数设定Private 成员的值
    26end;
    27
    28CONSTRUCTOR TET.Create;
    29BEGIN
    30  INHERITED Create;   //调用直接父类Tperson的Create方法//  ShowMessage('Tperson.Create 执行');
    31  ShowMessage('TET.Create 执行');
    32  Self.UFOSpeed := 300000000;    //Private属性只在属性定义的单元内可见,只可以在这里这样直接访问使用 UFOSpeed
    33end;
    34VAR   //为测试而设置此区
    35  AET : TET;
    36BEGIN
    37  AET := TET.Create;
    38  AET.DNA := 'fdsafsrfwefsd$#^^3';//父类的Protected属性在子类单元(本单元)内可见 ,在这里这样直接访问使用
    39  //AET.Blood := 'A'//父类的Private属性在子类单元(本单元)内不可见(只在其属性定义的单元内可见) ,在这里这样不能直接访问使用
    40  ShowMessage('AET.DNA = ' + AET.DNA );
    41  AET.Free;
    42end.
    43end.
    44
    45
  • 相关阅读:
    百度地图API显示多个标注点带百度样式信息检索窗口的代码
    百度地图API显示多个标注点并添加百度样式检索窗口
    百度地图API显示多个标注点并添加百度样式检索窗口
    生了一场闷气
    追求效率还是追求真理
    在VC++应用程序中读取文本数据
    一种创建子视图窗口的办法
    学会从已知推出未知
    unresolved external symbol __beginthreadex错误的解决——谈谈在Win32 Consle Application如何使用MFC类
    为何能在视图类能更新界面
  • 原文地址:https://www.cnblogs.com/dreamszx/p/1572013.html
Copyright © 2011-2022 走看看