麻烦解释一下... (50)(50分)

  • 主题发起人 主题发起人 zensst
  • 开始时间 开始时间
Z

zensst

Unregistered / Unconfirmed
GUEST, unregistred user!
麻烦 lczhuohuo ,再解释一下

1 对于 virtual 方法,inherited 是否很必要?
2 对于 abstract 方法, inherited 有哪些作用?
 
对于virtual方法,应该是override吧,因为虚方法中并没有具体的实现代码
 
abstract 是抽象方法,如果你不Override 定义他干What?
 
to popeye:
不对吧,虚方法中有代码的,

1,virtual 是虚方法,是 override 父类的同名方法,
可以 inherited , 也可以不用。看你想做什么。

2, abstract 是抽象方法,里面没有代码,只是给子类留一个接口,
当然没有 inherited.
 
SUPERMMX 说的对,我就不重复了。
但在多层继承以后,最初用ABSTRACT标识的方法,或许已有了代码,一定注意。
 
我完全拥护SuperMMx的讲话!!!
 
不好意思,看错了Inherited->override;
同意SuperMMX
 
补充一点:
如果子类的方法中没有用inherited,是否会不执行父类的代码?
 
不管怎样,必须保证如果要使得你的类的方法能够被调用,
必须在它或它的父类中找到一个已经被override的方法,
一个方法声明成virtual,在这个类的实现中,可以实现它,
也可以不实现,而abstract是一定不实现的,也就是说留给
子类去实现,virtual和abstract对于编译器来说不同是
很明显的,编译器会根据virtual还是abstract来决定是否
在本类中搜索实现。对于子类的方法的绑定,将沿着继承树
向上查找,如果本类没有实现,那就会使用父类或爷爷类的,
反正是最“近”的,如果找到根也没找到,就会报错。
至于inherited这个关键字,它的意思就是向上找,找到
实现的方法,并执行。
virtual一般用于做一个公共的基类,以利于使用类型识别(is)
和类型强制(as)来进行一些参数传递或者赋值之类的的的应用,
比如说TGraphi类。
abstract类用于构造抽象类,抽象类的作用类似于接口,但接口
有更好形式——uuid,所以在delphi中,abstract用的不多。
 
多人接受答案了。
 
后退
顶部