父类代码如下:
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,仅次而已。
分享到:
相关推荐
父类赋值给子类的一个小方法,仅供学习参考...
利用C#反射将子类舍弃多余的属性转换为父类,用途比较少。
本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下: 一、通过子类无参构造函数创建子类实例 创建父类Person和子类Student。 public class Person { public Person() { ...
父类可以完成的任务,子类对象也可以完成 子类可以调用父类Person p= new student(); 声明父类变量,实例化子类对象 Person p = new Student(); p.personshow();//说明不可以调用子类的方法,还是父类
此例子介绍了c#中,父类可以代替子类做很多事情。 此例适合初学者。
通常来说,C#中的子类无法调用父类的事件,但是可以通过在父类中创建一个方法来调用父类的事件,而子类通过调用父类的方法来触发事件。 具体实现代码如下: class parent { protected string name; public event ...
c#切换执行程序顺序,有些中级开发小伙伴还是搞不太明白在继承父类以及不同场景实例化的情况下,父类和子类的各种方法的执行顺序到底是,多年c#经验总结
今天小编就为大家分享一篇关于C++/JAVA/C#子类调用父类函数情况总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
窗体传值,或者是子类向父类传值。主窗体通过重写拦截消息方法,以接收子类传来的值。 窗体传值,或者是子类向父类传值。主窗体通过重写拦截消息方法,以接收子类传来的值。
C#,利用反射动态创建对象 C#,利用反射动态创建对象 C#,利用反射动态创建对象 C#,利用反射动态创建对象
C#中除了基本类型以外的类型都是引用类型。引用类型的特点是,在堆栈中存储的是该引 用类型指向的堆中的“地址”。所以,当引用类型之间相互赋值的时候,只是将堆栈中的值 (可以理解为所指向的“堆”地址)相互赋值...
"未将对象引用设置到对象的实例"錯誤個人總結
C#中子类重写父类的方法
1.覆盖父类,让子类重新定义。 2.抽象方法 子类必须实现 3.抽象类 不能被实例化,只能被继承。生成抽象方法,子类必须实现。 4.抽象方法必须定义在抽象类中,抽象类也可以定义非抽象方法。 这个是Virtual关键字...
《C#面向对象程序设计》源代码。本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发...
屏蔽父类成员C#程序,希望有点用吧。
C#Excel.dll引用
C#对象和Xml对象的相互转化 C#对象和Xml对象的相互转化