Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 261

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 261
_higrid.net-嗨网
当前位置:嗨网首页>书籍在线阅读

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 266

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 266

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 266

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 266

10.1.1 继承的定义和使用

在现有类(称为直接基类、父类)上建立新类(称为派生类、子类)的处理过程称为继承。派生类能自动获得基类的除了构造函数和析构函数以外的所有成员,可以在派生类中添加新的属性和方法扩展其功能。通过继承创建派生类的语法如下。

<访问修饰符> class 派生类名:基类名
{
    //类的代码
}

在实际中,一个类的对象也是另一个类的对象。例如,一个Rectangle(矩形)类“属于”四边形(正方形、平行四边形和梯形等都是四边形)。也可以说,Rectangle类是从Quadrilateral(四边形)类继承而来的。 Quadrilateral类是基类, Rectangle类是派生类。再如,教师类和学生类都可以从人这个类派生,讲师、教授可以从教师类派生,研究生和本科生可以从学生类派生而得到。

【范例10-1】 定义基类Person,然后通过继承创建派生类Student。

(1)启动Visual Studio 2013,新建一个控制台应用程序,项目名称为“InheritDemo”。选择【项目】 【添加类】菜单命令,在弹出的对话框中输入类的【名称】“Person”,然后单击【确定】按钮,在“Person.cs”中输入以下代码(代码10-1-1.txt)。

01  public class Person
02  {
03          //定义基类Person中的共有属性
04          private string _id;            //声明身份证号码字段_id
05          public string Id               //声明身份证号码属性ID
06          {
07                  get { return _id; }    //get访问器,得到身份证号码字段的值
08                  set { _id = value; }   //set访问器,设置身份证号码字段的值
09          }
10          private string _name;          //声明姓名字段
11          public string Name             //声明姓名属性
12          {
13                  get { return _name; }
14                  set { _name = value; }
15          }
16          private int _age;              //声明年龄字段
17          public int Age                 //声明年龄属性
18          {
19                  get { return _age; }
20                  set { _age = value; }
21          }
22          private string _gender;        //声明性别字段
23          public string Gender           //声明性别属性
24          {
25                  get { return _gender; }
26                  set { _gender = value; }
27          }
28          public Person()                //定义无参数的构造函数
29          { }
30          public Person(string name, int age, string gender)         //定义有3个参数的构造函数
31          { 
32                  _name = name;          //通过参数name对字段_name赋值
33                  _age = age;            //通过参数age对字段_age赋值
34                  _gender = gender;      //通过参数gender对字段_gender赋值
35           } 
36                  //基类的共有方法
37           public void Display()         //Display方法用于输出Person对象的姓名、性别和年龄信息
38          {
39                  Console.WriteLine("{0}是{1}性,年龄为{2}", this._name, this._gender, this._age);
40          }
41  }

(2)在Person.cs文件的最后添加下面的代码,通过继承创建派生类Student(代码10-1-2.txt)。

01  public class Student : Person            //创建派生类,派生自Person类
02  {
03          //定义派生类自己的属性
04          private string _class;           //定义表示学生所在班级的字段_class
05          public string  Class             //定义获取或设置班级信息的属性Class
06          {
07                  get { return _class; }
08                  set { _class = value; }
09          }
10          private string _department;       //定义学生所属系的字段
11          public string Department          //定义学生所属系的属性
12          {
13                  get { return _department; }
14                  set { _department = value; }
15          }
16          private string _no;              //定义表示学生学号的字段
17          public string No                 //定义学号的属性
18          {
19                  get { return _no; }
20                  set { _no = value; }
21          }
22          public Student()                 //无参数构造函数
23          {
24          }
25          //定义派生类独有的方法 Study,表示学生负有学习的任务
26          public void Study()
27          {
28                  Console.WriteLine("学生在学校学习");
29          }
30  }

(3)在Program.cs中的Main方法中添加以下代码(拓展代码10-1-3.txt),并进行测试。

01  static void Main(string[] args)
02  {
03          Person objPerson = new Person("刘六", 18, "男");  //创建Person的对象objPerson
04          objPerson.Display();                             //调用Display方法显示对象信息
05          Student objStudent = new Student();              //创建Student的对象objStudent
06          objStudent.Name ="王七";
07          objStudent.Age = 19;
08          objStudent.Gender = "男";
09          objStudent.Class = "2006软件工程专业1班";
10          objStudent.Display ();                           //访问基类Display方法
11          objStudent.Study();                              //调用派生类方法
12          Console.ReadKey();
13  }

【运行结果】

选择【调试】 【启用调试】菜单命令或单击按钮,即可在控制台中输出结果,如下图所示。

163.png 【范例分析】

在步骤(1)中,第4~27行是定义Person类中的身份证号码、姓名、年龄和性别等4个字段和其对应的属性;第30~35行是一个有3个参数的构造函数,用于创建对象;第36~39行定义了一个Display方法用于显示对象的相关信息。在步骤(2)中创建了一个派生类Student,第4~21行是定义Student类中的班级、系别、学号字段和其对应的属性;第26~28行定义一个派生类方法Study。在步骤(3)中,在Program.cs中创建对象,并对对象的成员赋值,然后利用控制台输出结果。

【拓展训练】

创建Person类的派生类Teacher 和Student类的派生类DoubleStudent(攻读双学位的学生)。在“InheritDemo”项目中添加类文件Teacher.cs,输入代码如下(拓展代码10-1-1.txt)。

01  class Teacher :Person                       //定义Teacher类,派生于Person类
02  {
03          private string _tid;                //声明教师编号字段
04          public string Tid                   //定义教师编号属性
05          {
06                  get { return _tid; }
07                  set { _tid = value; }
08          }
09          private string _course;              //声明所教课程字段
10          public string Course                 //定义所教课程属性
11          {
12                  get { return _course; }
13                  set { _course = value; }
14          }
15                                               //教师派生类的方法
16          public void Teaching()
17          {
18                  Console.WriteLine("教师在学校教课");
19          }
20  }
21  public class DoubleStudent : Student   //定义DoubleStudent类,派生自Student类
22          {
23          private string _sndBachelor;         //声明第二学位名称字段
24          public string SndBachelor            //定义第二学位名称属性
25          {
26                  get { return _sndBachelor; }
27                  set { _sndBachelor = value; }
28          }
29          public DoubleStudent()              //无参构造函数
30          {
31          }
32          public void UsaBachelor()           //定义方法
33          {
34                  Console.WriteLine("正在攻读美国Fort Hays大学学位");
35          }
36  }

在Program.cs中的Main方法中添加以下代码(拓展代码10-1-2.txt),并进行测试。

01  Teacher  objTeacher = new Teacher();               //创建Teacher类的对象
02  objTeacher.Name = "Martin";                        //对对象成员.Name赋值
03  objTeacher.Age = 35;                               //对对象成员.Age赋值
04  objTeacher.Gender = "男";                          //对对象成员.Gender赋值
05  objTeacher.Display();                              //访问Person类方法
06  objTeacher.Teaching ();                            //访问Teacher类方法
07  Console.WriteLine("DoubleStudent类:");
08  //创建DoubleStudent对象
09  DoubleStudent objspecial = new DoubleStudent();;  //创建类DoubleStudent的对象
10  objspecial .Name ="Bliss";                        //对对象成员.Name赋值
11  objspecial.Age = 18;                              //对对象成员.Age赋值
12  objspecial.Gender = "女";                         //对对象成员.Gender赋值
13  objspecial.Display ();                            //访问Person类方法显示信息
14  objspecial.Study();                               //访问Student类的方法
15  objspecial.UsaBachelor();                         //调用DoubleStudent类的方法

【运行结果】

运行结果如下图所示。

164.png 【范例分析】

在Teacher.cs中,第1~20行是定义Teacher类,其中第16~19行是Teacher中添加的新方法Teaching;第21~35行定义了一个派生自Student类的DoubleStudent类,其中第31~34行定义了DoubleStudent类中的新方法UsaBachelor。

在Program.cs中,分别创建了Teacher类和DoubleStudent类的对象,并对对象的成员赋值,调用相应的方法,最后在控制台输出结果。


Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 276

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 276

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 276

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 276