关于继承(100分)

  • 主题发起人 主题发起人 liuchong
  • 开始时间 开始时间
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
在子类中继承基类的“virtual”方法,要在子类实现部分使用“inherited”关键字
在子类的声明部分可以使用“override”关键字
测试发现无论是否“在子类的声明部分可以使用“override”关键字”都没有影响

是否只有“inherited”在影响着结果,“override”到道起到什么作用?
 
那是你的测试方法不对
你声明一个父类的变量,然后用子类去创建
这时候,你调用这个虚方法试试看,
看看他是执行父类的还是子类的?
 
下面的程序,是否写override关键字,其返回的结果是不一样的
这也说明了虚方法的特性
type
TRootObj = class(TObject)
public
procedure ShowMe()
virtual;
end;

TChildObj = class(TRootObj)
public
procedure ShowMe();// override;
end;

{ TChildObj }

procedure TChildObj.ShowMe;
begin
//inherited;
ShowMessage('ChildObj')
end;

{ TRootObj }

procedure TRootObj.ShowMe;
begin
ShowMessage('RootObj')
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a: TRootObj;
begin
a := TChildObj.Create;
a.ShowMe;
a.Free;
end;
 
测试后发现继承不会受到影响,但多态性受到影响
正如放飞所说
 
大家再谈谈,准备放分
 
如果不写override,实际上是子类的方法覆盖了根类的方法。
这个时候,如果变量是子类,则使用子类的方法,如果变量是根类,则使用根类的方法。
而inherited关键字仅仅是表示你要掉祖先的某个方法而已,事实上,你完全可以在子类的方法a的实现部分,通过inherited关键字调用到祖先类的b方法,呵呵
 
接受答案了.
 
后退
顶部