class test
{
static void Main(string[] args)
{
Console.WriteLine("父类对象指向父类引用:");
Person p2 = new Person();
p2.virFun();
Console.WriteLine("只是创建子类对象:");
Son1 s = new Son1();
s.virFun();
Console.WriteLine("父类对象指向子类引用:");
Person p = new Son1();
p.virFun();
//Console.WriteLine("子类对象指向父类引用:"); //--子类对象指向父类,这样是不允许的,编译时要报错
//Son1 p3 = new Person();
//p3.virFun();
Console.ReadLine();
}
}
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");
}
}
分享到:
相关推荐
利用C#反射将子类舍弃多余的属性转换为父类,用途比较少。
这里我们将深入探讨如何在 C# 中进行父类属性到子类属性的赋值,并考虑效率、灵活性和代码可维护性。 首先,让我们理解一下父类和子类的概念。在 C# 中,父类(也称为基类或超类)是定义了一组属性和方法的类,而...
在Windows Presentation Foundation (WPF) 中,继承是面向对象编程的一个关键特性,它允许子类继承父类的属性、字段和方法,以便扩展或重写它们。标题“WPF继承_子类继承父类,实现跨类调用方法”表明我们将讨论如何...
这是因为C#在创建子类实例时,会自动调用父类的无参构造函数(如果没有指定特定的构造函数)。 如果父类没有无参构造函数,如下面的情况: ```csharp public class Person { public Person(string name) { ...
如果一个类继承一个父类,那么子类会拥有父类所规定的所以成员 子类还可以拥有父类没有的独有成员 父类可以完成的任务,子类对象也可以完成 子类可以调用父类Person p= new student(); 声明父类变量,实例化子类...
在C#中,如果一个窗体是另一个窗体的子类(继承关系),可以通过以下方法实现数据传递: - 调用父类方法:子类可以调用父类的非私有方法,将数据作为参数传递。 - 事件:在子类中触发事件,然后在父类中处理事件...
C#与Java类似,但有些微小的差异: 1. **构造函数调用**: - **this(参数)**:类似于Java,C#也允许在子类构造函数内部通过`this(param)`调用本类的其他构造函数。 - **base(参数)**:在子类构造函数中,使用`...
6. **子类属性与方法**:子类可以有自己的属性和方法,也可以调用父类方法。 7. **构造函数调用**:子类可以使用`super`调用父类构造器。 以上就是关于“子类调用抽象父类”这一主题的主要内容,理解并熟练运用这些...
总的来说,屏蔽父类成员是C#中的一种特性,它允许子类定义与父类同名的成员,但不改变父类原有的行为。然而,对于多态性而言,通常推荐使用`override`关键字来确保子类能够正确地扩展或修改父类的行为。在实际开发中...
通常来说,C#中的子类无法调用父类的事件,但是可以通过在父类中创建一个方法来调用父类的事件,而子类通过调用父类的方法来触发事件。 具体实现代码如下: class parent { protected string name; public event ...
在C#编程语言中,子类继承父类是一种常见的面向对象特性,它允许子类获取父类的属性和方法,并可以扩展或修改这些特性。本文将深入探讨C#中子类如何重写父类的方法,以及这种方法在实际编程中的应用。 ### 1. 继承...
子类可以继承父类的所有非私有成员,并可以添加自己的成员或重写父类的方法。例如: ```csharp public class GraduateStudent : Student { public string ThesisTitle; public GraduateStudent(string name, int...
3. 基类与派生类的转换:`A`方法展示了如何将子类对象赋值给父类引用,允许调用父类中的公共方法。`B`方法说明了父类引用不能直接赋值给子类对象。`C`方法演示了向下转型(downcasting),将父类对象转换为子类对象...
重写则是在子类中提供与父类同名的方法,改变其具体实现;抽象方法是声明在抽象类中的,没有实现,需要子类进行实现。 此外,C# 2.0引入了一些新的面向对象特性,如匿名方法、委托(Delegate)和事件(Event)。...
在C#编程语言中,"基对象引用子类实例"是一种常见的面向对象编程特性,它体现了多态性(Polymorphism)的概念。多态性是OOP(面向对象编程)的三大基本特征之一,另外两个是封装和继承。在这个主题中,我们将深入...
当实例化子类`B`时,C#会先执行父类的构造函数,然后再执行子类的构造函数。这是因为子类继承了父类,需要确保父类的状态正确初始化。执行顺序如下: - 进入`A`类,执行构造函数`A()`。 - 进入`B`类,执行构造...
继承允许子类继承父类的属性和方法,实现代码复用;多态则允许不同类的对象对同一消息做出不同的响应,增强了软件的灵活性。 4. **泛型**:C#的泛型允许在不指定具体类型的情况下编写代码,提高了代码的可重用性和...
在C#编程语言中,虚方法是面向对象编程的一个核心概念,它允许子类重写父类的行为。本文将深入探讨虚方法的概念、用途以及如何在C#中使用它们,特别针对面向对象编程的初学者。 一、虚方法介绍 虚方法是C#中的一种...