ClassA里面有两个方法A_1,A_2,其中A_1会调用A_2。类ClassB继承自ClassA,并覆盖了上述的两个方法,但是ClassB中的A_1方法不调用A_2。两个新的方法里面最后都有一句inherited;
我认为先执行ClassB.A_1里面的语句,最后碰到了inherited,转去执行ClassA.A_1里面的语句,然后执行ClassA.A_2,最后返回到ClassB.A_1。那么ClassB.A_2是不是就不执行了?
我认为先执行ClassB.A_1里面的语句,最后碰到了inherited,转去执行ClassA.A_1里面的语句,然后执行ClassA.A_2,最后返回到ClassB.A_1。那么ClassB.A_2是不是就不执行了?
解决方案 »
- 菜单一般是在窗体的左上方的,能不能放在左边或右边,甚至下边呢?
- 如何取得treeview某节点下的所有子孙节点
- ???????急!如何将richedit中的数据存为rtf文件???????
- 都在散分 我也凑个热闹 散分~~~
- 如何在windows服务程序中操作数据库
- 急急急!!!关于dephi MD5和base64加密问题
- 有关ctrl+alt+del
- 初次做管理信息系统做什么简单些呢?我没学过替别人做。大约给个思路吧,它是什么样?就是简单的数据库操作吧?来者有分(急)50分送上
- 问多媒体时钟控件
- 我决定放弃PB学delphi了。
- 请问:完成端口、重叠IO和TcpServer组件(NonBlock的)有什么区别
- 初学求助:如何求两个日期之间相隔的天数
type ///定义部分
TA=class
public
procedure A_1;virtual;
procedure A_2;virtual;
end;
TB=class(TA)
public
procedure A_1;override;
procedure A_2;override;
end;
/////////////////////实现部分
procedure TA.A_1;
begin
showmessage('a-A_1');
A_2;
end;procedure TA.A_2;
begin
showmessage('a-A_1-----A_2');
end;{ TB }procedure TB.A_1;
begin
showmessage('b-A_1');
inherited;
end;procedure TB.A_2;
begin
showmessage('b-A_2');
inherited;
end;
//执行过程
var
B:TB;
begin
B:=TB.Create;
B.A_1;
end;
可以从代码中看到的执行过程是
var
B:TB;
begin
B:=TB.Create;
B.A_1; //首先执行了B里A_1,结果是"showmessage('b-A_1');",然后inherited;执行到A里的showmessage('a-A_1');当执行TA的A_1方法里的A_2的时候,此时的当前对象是子类,所以,执行了子类(TB)的A_2方法 ,也就是showmessage('b-A_2');然后子类在inherited;又执行了父类的showmessage('a-A_1-----A_2');所以,四个方法都执行了
end;