如果加上reintroduce将隐藏祖先类的同名方法,那么隐藏方法和覆盖方法有什么不同,最好有例子说明,分数可加!

解决方案 »

  1.   

    加 override 并非完全覆盖,如果在内部引用  inherited 将会执行父类中的方法(由inherited的调用地方决定)
      

  2.   

    不加override编译器会警告已经在父类中存在该方法。加reintroduce则可以使编译通过(个人认为:就是加override而不调用inherited )
      

  3.   

    同意楼上
    若不加overriden编译器会warning,即覆盖了父类的同名方法,有点类似于overload,当然也就不能用inherited了
      

  4.   

    Use reintroduce when you want to hide an inherited virtual method with a new one.
    这是Delphi帮助的原文,to HIDE an inherited VIRTUAL method.所以我认为是父类的虚方法在子类里面希望不是虚方法的时候,可用reintroduce,这是reintroduce的一个主要目的,否则override就可以了。TA = class
    public
      procedure F; virtual;//虚方法
    end;TB = clas(TA)
    public
      procedure F; reintroduce;//静态方法
    end;不对之处,请指点
      

  5.   

    加了virtual关键字的方法才能在子类中被覆盖(override),重载(overload)则没有此限制,用reintrduce关键字可以忽略编译器对父子类中同名方法的警告,引用时直接使用子类的该方法,而与父类的同名方法无关,但如果在子类的该方法中加上inherited的话,还是会先调用父类的同名方法,再调用子类方法自己的实现.
    总的来说,reintroduce只是起到了屏蔽编译警告的作用。
      

  6.   

    to 楼上:
     "但如果在子类的该方法中加上inherited的话,还是会先调用父类的同名方法,再调用子类方法自己的实现."
    好像不是这样吧?如果用reintroduce,无论加不加inherited,都是与父类一样的实现。