面向对象之路--静态方法-虚方法和动态方法

按照方法的绑定机制分:static,virtual,dynamic;后两种又叫abstract method.
在面向过程编程中,语言是早绑定的;
面向对象编程中,既可早绑定也可晚绑定,给程序员很大的灵活性.

tMyclass=class

  procedure iAmStatic;//静态
  procedure iAmVirtual;//虚方法
  procedure iAmDynamic;//动态方法
  procedure iAmVirtualAbstract;Virtual;Abstract;//虚抽象方法

end;

=========
type
  tcomputer=class
     procedure starting;
  end;
  tnotebookPc=class(tcomputer)
     procedure starting;
 end;


var 
   computer=Tcomputer;
   notebookPc=tmotebookpc ;
begin
  computer:=tcomputer.create;
  computer.starting; //调用的是tcomputer.starting
  computer.destroy;
  computer:=tnotebookpc.create;//引用的该类的对象,但他声明的是tcomputer;
  computer.starting;// 调用的是tcomputer.starting; 
  tnotebookpc(computer).starting;//调用的是tnotebookpc
  computer.Destroy;
  notebookpc:=tnotebookpc.create;
  notebookpc.starting; //调用的是tnotebookpc
  notebookpc.destroy;
end;


静态方法就象通常的过程和函数那样调用.当调用一个静态方法时.类或对象所声明的类型决定了哪种方法被执行.编译器知道这些方法的地址.执行速度最快,但不能被覆盖,不支持多态性.
虚方法和动态方法能在派生类中被覆盖,调用时由类或对象的实际类型决定哪种实现被调用,而不是他们声明的类型.一切都发生在运行时
虚方法------>由VMT(包含祖先类的虚方法和本对象的虚方法)调度;内存使用比动态方法多,但执行速度较快;
动态方法(编译器指定一个唯一的编号no.)-----no.--->DMT(包含该对象的动态方法和祖先类的DMT),通过祖先DMT访问祖先其余的动态方法.使用内存比虚方法少,但执行速度慢.

type
  tcomputer=class
     procedure starting;virtual;
  end;
  tnotebookPc=class(tcomputer)
     procedure starting;override;
 end;
 tPC=class(tcomputer);
    procedure starting;override;
 end;

....
...
var
  computer:tcomputer;
begin
  computer:=tnotebookpc.create;
  computer.starting;   //diaoyong tnotebookpc.starting;
  computer.destroy;
  computer:=tPC.create;  
  computer.starting;  //diaoy调用的是tpc.starting;
  computer.destroy;
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安优小青和他的程序生活

我的文档对您有很大的帮助吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值