黑马程序员技术交流社区
标题:
C#中的问题
[打印本页]
作者:
周健
时间:
2012-4-13 21:05
标题:
C#中的问题
在做题的时候遇到一个问题
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()
结果却为:“在继承方法中”
我不太明白为什么会这样,请高手指点!谢了
作者:
崔楠
时间:
2012-4-13 21:08
Aa aa=new Ba();
你是以Aa这个父类作为开头来定义的,Ba是它的继续类也就是子类,所以仍然是"在抽象方法中";可以认为"父>子"!
你如果换成Ba aa=new Ba()试试?
作者:
刘真
时间:
2012-4-14 14:42
1.
Aa aa=new Ba();//为父类对象aa分配了派生类对象的类型空间
aa.Demo();//调用的是派生类的Demo()方法。
2.
如果抽象类中的方法为:public vaitrul void Demo()
另一个为:public override void Demo()
结果却为:“在继承方法中”
不管是否重写,关键是父类对象分配的是派生类对象的空间,运行时总是调用派生类对象的方法。
作者:
郑森
时间:
2012-4-14 15:04
new在用作修饰符时,new关键字可以显示隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基本版本。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2