这是因为,TClassTwo是继承自TClassOne的,而且ClassOneFunc此函数的名称在TClassTwo中是没用的,即没用被重载或overriden,因此可直接调用,delphi的编译器会自动寻访TClassTwo的父类TClassOne的ClassOneFunc方法

解决方案 »

  1.   

    先要理解类与对象的区别。
    //--------|正确答案是 Writeln (ClassOneFunc(100, 200));|----
    ClassOneFunc 是保护方法,
    在子类TClassTwo中继承下了它,
    就象调用自己的方法一样.//-------|为什么不是下面这个呢? 谢谢大家讲解一些理由! |---------------
    Writeln (TClassOne.ClassOneFunc(100, 200)); 
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
              因为你ClassOneFunc是对象的方法,而不是类的方法,所以不能这样用.
      

  2.   

    如果ClassOneFunc是TClassOne的静态方法(在方法定义前加关键字class),则可以这样调用:
    Writeln (TClassOne.ClassOneFunc(100, 200)); 但既然TClassTwo继承自TClassOne,那它已经拥有了TClassOne的Public方法,直接调用ClassOneFunc就可以了。如果你一定要调用TClassOne的方法,则必须先生成TClassOne的实例:
    MyClassOne : TClassOne;
    ...
    MyClassOne := TClassOne.Create;
    MyClassOne.ClassOneFunc(100, 200);
    MyClassOne.Free;
      

  3.   

    ClassOneFunc不是类属方法,当然不能那么写
      

  4.   

    我想你应该理解这几个东东:
       1:类方法
       2:对象方法
       3:继承
       4:多态
    建议看看D5从入门到精通
       很好的一本讲了OOP的东东!
      

  5.   

    回复人: NewDelphier(我是新手) (  ) 信誉:100  2002-3-10 10:51:07  得分:0  
     
     
      我想你应该理解这几个东东: 
    1:类方法 
    2:对象方法 
    3:继承 
    4:多态 
    建议看看D5从入门到精通 
    很好的一本讲了OOP的东东! 如果我不是这样学习的话,不会这样提问题的,而是提类似那个那个部件如何实现高级功能的谢谢!