Welcome to my blog

天行健,程序将生生不息 enjoy it I will get a lot......

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
严格来说,多态与继承、重载并不是孤立的,他们之间存在着紧密的联系,多态是建立在这两者的基础之上的(实际上继承就有用重载这一特性)。


  传统的多态实际上就是由虚函数(Virtual Function)利用虚表(Virtual Table)实现的(早期C模拟OO特性时使用最多,C++的实现也是,后来的技术未作研究,是否使用VT不得而知),自然是离不开继承,换句话说多态实际上覆盖了继承。

  正是由于继承与多态的紧密联系,使得我们很容易张冠李戴,那么如何区别呢?

  举个常用的例子:






Abstract Class Sharp 
{
 
public bool isSharp()
 
{
   
return true;
 }

 
public abstract int getSides();
}


Class Triangle : Sharp 
{
 
public override int getSides()
 
{
   
return 3;
 }

}


Class Rectangle : Sharp 
{
 pubilc 
override int getSides()
 
{
  
return 4;
 }

}





那么这种类的关系叫做继承,下面这种使用方式也是继承所带来的:
Triangel tri = new Triangle();
println("Triangle is a type of sharp? " + tri.isSharp());

而这种方式则是多态:
Sharp sharp = new Rectangle();
println("My sharp has " + sharp.getSides() + " sides.");

这两者区别在哪?很显然,继承是子类使用父类的方法,而多态则是父类使用子类的方法。

其技术上的区别是绑定时期,晚期绑定一定是多态。

posted on 2005-02-22 22:44  newbin  阅读(867)  评论(1)    收藏  举报