posts - 195,  comments - 30,  trackbacks - 0
using   System;


public   class   A
{
public   virtual   void   F()
{
Console.WriteLine( "A.F() ");
}
}

class   B:A
{
public   override   void   F() //这才叫多态
{
Console.WriteLine( "B.F() ");
}
}

class   C:A
{
public   new   void   F() //用 new 来隐藏
{
Console.WriteLine( "C.F() ");
}
}

class   Test
{
public   static   void   Main()
{
B   b   =   new   B();
b.F();

C   c   =   new   C();
c.F();

A   a;
a   =   b;
a.F();
a   =   c;
a.F();
}
}


//请参看输出结果

A   a;
a   =   b;//基类的引用指向派生类的对象,调用派生类的方法
a.F();
a   =   c;//基类的引用指向派生类的对象,调用基类的方法
a.F();



上面从语法上讲了,我从底层实现讲讲吧,呵呵

基础知识:
        每个类有一个方法表,每个方法称之为方法槽

虚方法重载后
        重载的方法重写这个方法槽

new  
        新增方法槽,原有的方法槽保留在原位置,所以当基类的引用根据相同的索引查找过来时,找到的时原来的方法。 new 相当于隐藏

故有以上的行为
posted on 2011-04-08 22:47 luis 阅读(179) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

友情链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜