类的问题

hupei485 2008-11-17 07:26:53
7.写出程序的输出结果
public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B: A
{
public B()
{
Console.WriteLine('B');
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
public static void Main()
{
A a = new B();
a.Fun();
}
}

答:A,B,A.Fun()

A a = new B(); 是什么意思啊?为什么不是A a = new A();

public virtual void Fun() virtual方法是什么?

...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
3楼正解
feng4557875 2008-11-17
  • 打赏
  • 举报
回复
virtual关键字用于讲方法定义为支持多态,virtual关键字用于对一个类中可以修改的方法的声明,这个方法我们叫他虚方法。子类用override关键字可以自由的实现虚方法。
提供一个语法:
[访问修饰符] virtual [返回类型] 方法名称([参数列表])
{
......虚方法的实现
}
feng4557875 2008-11-17
  • 打赏
  • 举报
回复
A a = new B();
这一句的过程是这样的,
1)创建一个类A的引用a
2)创建一个类B的实例
3)把类B的引用赋值给a
因为A是B的父类,所以,赋值成功。


acqy 2008-11-17
  • 打赏
  • 举报
回复
建议楼主还是应该先认真看看面向对象语言与面向对象设计相关的知识,然后再来学习C#语言。
duration1 2008-11-17
  • 打赏
  • 举报
回复
因为B继承自A,可以说如果A是一个大类的话,B就是A的一个小类,
所以用A a = new B();可以直接实例化一个B的对象。如果还有一个C继承自A,也可以用A a = new C();实例化一个C的对象。
如果我的表述不是很清楚的话,你可以看《Head First设计模式》,里面将的很详细。
将方法声明为virtual就是说该方法可以被子类重写(override)。
C_sdnElf 2008-11-17
  • 打赏
  • 举报
回复
public virtual void Fun() virtual说明方法fun()为虚方法

在派生类B中..可以用override来重写虚方法fun()

A a = new B(); 编译时类型为A..运行时类型为B......
cc_net 2008-11-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/cc_net/archive/2008/09/20/2955771.aspx
长沙三毛 2008-11-17
  • 打赏
  • 举报
回复
你在派生类中不是 override,而是 new,所以不会体现多态性质。

110,531

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧