`
wsql
  • 浏览: 11790838 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C#怎么理解“父类引用指向子类对象”

 
阅读更多

父类代码如下:
public class Person
{
//父类的构造函数
public Person()
{
Console.WriteLine("Person");
}
//父类的虚方法
public virtual void virFun()
{
Console.WriteLine("Person's Fun");
}
}
子类代码如下:
public class Son1:Person//继承
{
//子类Son1的构造方法
public Son1()
{
Console.WriteLine("Son1");
}
//重写父类的虚方法
public override void virFun()
{
Console.WriteLine("Son's Fun");
}
}
测试类代码如下:
class Test
{
static void Main(string[] args)
{
Console.WriteLine("只是创建子类对象:");
Son1 s = new Son1();
s.virFun();

Console.WriteLine("父类对象指向子类引用:");
Person p = new Son1();
p.virFun();

}
}
我只创建子类对象指向子类本身,和父类对象指向子类引用,运行的结果是相同的,均为:
Person
Son1
Son's Fun
那么创建一个父类对象,却指向子类,所谓的这个父类对象指向子类引用(跟TM绕口令似的)
Person p = new Son1();
就是这行,
究竟有什么用途,为什么要用它?我直接用子类对象不完了?什么时候用它,它究竟是什么含义,能解决什么?谁能帮我生动的解释一下,还有分析一下程序的运行过程,我不理解。
非常感谢!

Person p=new Son1()就是相当于子类向上转型;
也可以写成下面这样:
Person p=new Person();
Son1 s=new Son1();
p=s;
将子类对象赋给父类对象就是向上转型,Person p=new Son1()中的new Son1()就是实例化一个没有名字的对象,然后转型给父类声明的对象p,仅次而已。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics