首页 > 编程笔记 > C#笔记

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 中定义的公有属性。代码如下。
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 子类可访问性高于父类时出现的错误提示

相关文章