今天面试,最简单的继承题不会做,大家帮我看看,
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





