A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周健 中级黑马   /  2012-4-13 21:05  /  1543 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在做题的时候遇到一个问题
public abstract Aa
{
public void Demo()
{
Console.writer("在抽象方法中");
}
}

public class Ba : Aa
{
public new void Demo()
{
Console.writer("在继承方法中");
}
}

public class Text
{
public static void Main()
{
//父类的引用指向子类
Aa aa=new Ba();
aa.Demo();
]
}

我让为,会在控制台输出 :“在继承方法中”,
可以答案为:“在抽象方法中” ,我不知道为什么。

如果抽象类中的方法为:public vaitrul void Demo()
另一个为:public override void Demo()
结果却为:“在继承方法中”

我不太明白为什么会这样,请高手指点!谢了

评分

参与人数 1技术分 +3 收起 理由
郑文 + 3

查看全部评分

3 个回复

倒序浏览
Aa aa=new Ba();
你是以Aa这个父类作为开头来定义的,Ba是它的继续类也就是子类,所以仍然是"在抽象方法中";可以认为"父>子"!
你如果换成Ba aa=new Ba()试试?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
1.Aa aa=new Ba();//为父类对象aa分配了派生类对象的类型空间
aa.Demo();//调用的是派生类的Demo()方法。

2.如果抽象类中的方法为:public vaitrul void Demo()
另一个为:public override void Demo()
结果却为:“在继承方法中”
不管是否重写,关键是父类对象分配的是派生类对象的空间,运行时总是调用派生类对象的方法。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
new在用作修饰符时,new关键字可以显示隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基本版本。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马