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是不是就不执行了?

解决方案 »

  1.   

    在两个方法里 加个不同的 showmessage 运行时不就知道有没有执行了
      

  2.   

    这个是多态的一个例子,楼主细心看下代码
    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;
      

  3.   

    多态,可以具体看书了,哈哈,我说的也很不糊涂(俺本身就不太明白,不好意思)
    可以从代码中看到的执行过程是
    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;