C#继承的基本用法(小白必看)
继承是面向对象编程的三大基本特征之一。例如,我们现在经常用的平板电脑就是从台式机发展而来的,在程序设计汇总过程中,我们就可以把平板电脑和台式机的这种关系称作继承。
在程序设计中实现继承,表示这个类拥有它继承的类的所有公有成员或者受保护成员。其中,被继承的类称为父类或基类。实现继承的类称为子类或派生类,例如,这里的平板电脑就相当于子类或者派生类,而台式机相当于父类或基类,如下图所示。
图 1 平板电脑和台式机的继承关系
下面演示一下 C# 中的继承。创建一个新类 Test,同时创建另一个新类 Test2 继承 Test 类,其中包括重写的父类成员方法以及新增成员方法等。
图 2 所示为 Test 类与 Test2 类之间的继承关系。
图 2 Test类与Test2类之间的继承关系
C# 中使用“:”来表示两个类的继承关系。继承一个类时,类成员的可访问性是一个重要的问题。子类不能访问父类的私有成员,但是可以访问其公共成员,即只要使用 public 声明类成员,就可以让一个类成员被父类和子类同时访问,同时也可以被外部的代码访问。
另外,为了解决父类成员的访问问题,C# 还提供了另外一种访问修饰符——protected。它表示受保护成员,只有父类和子类才能访问 protected 成员,外部代码不能访问。
说明,子类不能继承父类中定义的 private 成员。
【实例】创建一个控制台应用程序,模拟实现进销存管理系统的进货信息并输出。自定义一个 Goods 类,在该类中定义两个公有属性,用于表示商品编号和名称;然后自定义 JHInfo 类,继承自 Goods 类,在该类中定义进货编号属性,以及输出进货信息的方法;最后在 Program 类的 Main 方法中创建子类 JHInfo 的对象,并使用该对象调用父类 Goods 中定义的公有属性。代码如下。
注意,C# 只支持类的单继承,而不支持类的多重继承,即在 C# 中一次只允许继承一个类,不能同时继承多个类。例如,下面的代码是错误的。
图 3 继承多个类时出现的错误提示
此外,在实现类的继承时,子类的可访问性必须要低于或者等于父类的可访问性。例如,下面的代码是错误的。
图 4 子类可访问性高于父类时出现的错误提示
在程序设计中实现继承,表示这个类拥有它继承的类的所有公有成员或者受保护成员。其中,被继承的类称为父类或基类。实现继承的类称为子类或派生类,例如,这里的平板电脑就相当于子类或者派生类,而台式机相当于父类或基类,如下图所示。
图 1 平板电脑和台式机的继承关系
继承的使用
继承的基本思想是基于某个父类的扩展,产生出一个新的子类。子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法。下面演示一下 C# 中的继承。创建一个新类 Test,同时创建另一个新类 Test2 继承 Test 类,其中包括重写的父类成员方法以及新增成员方法等。
图 2 所示为 Test 类与 Test2 类之间的继承关系。
图 2 Test类与Test2类之间的继承关系
C# 中使用“:”来表示两个类的继承关系。继承一个类时,类成员的可访问性是一个重要的问题。子类不能访问父类的私有成员,但是可以访问其公共成员,即只要使用 public 声明类成员,就可以让一个类成员被父类和子类同时访问,同时也可以被外部的代码访问。
另外,为了解决父类成员的访问问题,C# 还提供了另外一种访问修饰符——protected。它表示受保护成员,只有父类和子类才能访问 protected 成员,外部代码不能访问。
说明,子类不能继承父类中定义的 private 成员。
【实例】创建一个控制台应用程序,模拟实现进销存管理系统的进货信息并输出。自定义一个 Goods 类,在该类中定义两个公有属性,用于表示商品编号和名称;然后自定义 JHInfo 类,继承自 Goods 类,在该类中定义进货编号属性,以及输出进货信息的方法;最后在 Program 类的 Main 方法中创建子类 JHInfo 的对象,并使用该对象调用父类 Goods 中定义的公有属性。代码如下。
class Goods { public string TradeCode { get; set; } //定义商品编号属性 public string FullName { get; set; } //定义商品名称属性 } class JHInfo : Goods { public string JHID { get; set; } //定义进货编号属性 public void showInfo() //输出进货信息 { Console.WriteLine("进货编号:{0},商品编号:{1},商品名称:{2}", JHID, TradeCode, FullName); } } class Program { static void Main(string[] args) { JHInfo jh = new JHInfo();//创建JHInfo对象 jh.TradeCode = "T100001";//设置父类中的TradeCode属性 jh.FullName = "笔记本电脑";//设置父类中的FullName属性 jh.JHID = "JH00001";//设置JHID属性 jh.showInfo();//输出信息 Console.ReadLine(); } }程序运行结果为:
进货编号:JH00001,商品编号:T100001,商品名称:笔记本电脑
注意,C# 只支持类的单继承,而不支持类的多重继承,即在 C# 中一次只允许继承一个类,不能同时继承多个类。例如,下面的代码是错误的。
class Program : Goods, JHInfo上面代码在 Visual Studio 2019 开发环境中将会出现下图所示的错误提示。
图 3 继承多个类时出现的错误提示
此外,在实现类的继承时,子类的可访问性必须要低于或者等于父类的可访问性。例如,下面的代码是错误的。
class Goods { } public class JHInfo : Goods { }因为父类 Goods 在声明时没有指定访问修饰符,其默认访问级别为 private,而子类 JHInfo 的可访问性 public 要高于父类 Goods 的可访问性,所以会出现错误,错误提示如下图所示。
图 4 子类可访问性高于父类时出现的错误提示