静态有个虚拟表,编译的时候就已经确定了每个函数的地址。这里面放着所有静态方法的地址,这样程序调用的时候,直接在这里取地址,调用函数就可以了,速度比较快。而且不能被重载。
动态方法,好像编译的时候并不知道每个子类函数的地址,它是根据对象的所属的类动态调用函数,灵活方便,并且提高了速度譬如
a=class
f1:static;
f2:dynatic
b=class(a)
f1;
f2:override;
a1:a
a1:=a.create;
a1.f1 调用a.f1
a1.f2 调用a.f2;
a1:=b.create
a1.f1; 调用a.f1
a2.f2; 调用b.f2
因为a1被宣称为a类的对象,所以对于静态函数他只能调用f1,对于动态函数,
可以动态根据他所属的类来执行。
关于静态方法的覆盖
最新推荐文章于 2024-01-05 21:48:22 发布