CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  扩充话题 >  灌水乐园

今天面试,最简单的继承题不会做,大家帮我看看,

楼主e251396(我要两个包子,How Much?)2006-12-01 13:38:31 在 扩充话题 / 灌水乐园 提问

static   void   Main(string[]   args)  
  {  
  B   c   =   new   C();  
  c.M();  
  }  
  class   B    
  {  
    public     void     M()  
  {  
  Console.WriteLine("我叫山");  
   
  }  
  }  
  class   C   :   B  
  {  
    public   void   M()  
  {  
  Console.WriteLine("我是江西人");  
   
  }  
   
  }  
  为什么执行结果是“我叫山”而不是“我是江西人”  
  class   C中的void   M()不是覆盖了class   B的方法吗?那就是应该调用子类的方法呀,  
   
  请教啊  
  如果是这样的话  
  static   void   Main(string[]   args)  
  {  
  C   c   =   new   C();  
  c.M();  
  }  
  class   B    
  {  
    public     void     M()  
  {  
  Console.WriteLine("我叫山");  
   
  }  
  }  
  class   C   :   B  
  {  
    public   void   M()  
  {  
  Console.WriteLine("我是江西人");  
   
  }  
   
  }  
  结果就是“我是江西人”为什么呀,  
   
  问题点数:30、回复次数:14Top

1 楼GlideJi()回复于 2006-12-01 13:43:49 得分 0

只想问lz,结果面试如何……Top

2 楼e251396(我要两个包子,How Much?)回复于 2006-12-01 13:47:09 得分 0

那你说呢?Top

3 楼Ass_Of_Gril(中原一点黄)回复于 2006-12-01 13:47:42 得分 0

老之:)Top

4 楼unigod(风)回复于 2006-12-01 13:53:56 得分 0

只想问结果  
  Top

5 楼e251396(我要两个包子,How Much?)回复于 2006-12-01 14:00:39 得分 0

先说一下答案吧,我真的不理解啊,Top

6 楼leafsword_519(喝水的猪)回复于 2006-12-01 14:03:09 得分 0

mkTop

7 楼zzz22333(下蛋公鸡公鸡中的战斗机)(书上说抽烟不好我把烟戒了;书上说喝酒不好我少喝了;书上说媳妇不好我把书撕了)回复于 2006-12-01 14:10:09 得分 0

class   C   :   B     是C继承自B,当然是B类把C覆盖了,输出的C自然就是B的内容Top

8 楼IMHELLFIRE(真正的用户痛恨真正的程序员。)回复于 2006-12-01 14:10:17 得分 0

整明白virtual和override怎么用就知道答案了。Top

9 楼lushula(为人民币服务的二拉)回复于 2006-12-01 14:23:32 得分 0

class   C   :   B     是C继承自B,当然是B类把C覆盖了,输出的C自然就是B的内容        
  Top

10 楼wlp555ren()回复于 2006-12-01 14:48:22 得分 0

B类被继承,应该是B类的方法被覆盖吧。。为什么是基类的方法覆盖派生类的方法,不太明白。Top

11 楼lihua9666(沙漠孤鱼)回复于 2006-12-01 14:57:05 得分 0

B   c   =   new   C()的写法是错误的  
  严格的说应该写成  
  B   *c=(B*)new   C();  
  楼住现在明白了吧,c其实是B的实例,当然调用的实B::M()  
   
  不懂装懂的人请不要乱说,以免误导别人。Top

12 楼vosov(ask a favor of wind...)回复于 2006-12-01 15:08:31 得分 0

因为并没有覆盖基类的方法,而是隐藏  
  B   x   =   new   C()的时候,x被认为是B的实例,所以调用B的方法(也就是基类的方法)Top

13 楼lyck(猪头猪脑猪尾巴)回复于 2006-12-01 17:27:01 得分 0

昏倒,,  
   
  这两个M()根本就没有任何关系,,怎么会跟“继承”扯在一起?  
   
  还有就是请不懂的人不要不负责任的乱讲话,,,Top

14 楼NoMembers(haoran)回复于 2006-12-02 15:03:09 得分 0

因为   B     c   =   new   C();  
  对象c是通过c类实例化的,但是c是类b的对象,当执行c.M()当然要调用我叫山了  
  当然我的理解也不一定对,只是个人之见Top

相关问题

关键词

得分解答快速导航

  • 帖主:e251396

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo