Net基础篇_学习笔记_第十二天_面向对象继承(父类和子类)

继承

我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
单独的封装到一个类中,作为这些类的父类。
Student、Teacher、Driver 子类  派生类
Person                               父类  基类
子类继承了父类,那么子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。
解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显示的调用父类的构造函数,使用关键字:base()

继承的特性
1、继承的单根性:一个子类只能有一个父类。
2、继承的传递性

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace ConsoleApplication3
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Student s = new Student();
14             s.CHLSS();
15             s.Age = 58;
16             s.Name = "李阳";
17             Console.WriteLine("{0}是{1}岁了", s.Name, s.Age);
18             Console.ReadKey();
19         }
20     }
21     public class Person
22     {
23         private string _name;
24         public string Name
25         {
26             get { return _name; }
27             set { _name = value; }
28         }
29         private int _age;
30         public int Age
31         {
32             get { return _age; }
33             set { _age = value; }
34         }
35         public char _gender;
36         public char Gender
37         {
38             get { return _gender; }
39             set { _gender = value; }
40         }
41         public void CHLSS()
42         {
43             Console.WriteLine("吃喝拉撒睡");
44         }
45         public Person(string name, int age, char gender)//构造函数
46         {
47             this.Name = name;
48             this.Age = age;
49             this.Gender = gender;
50         }
51         //public Person()
52         //{
53 
54         //}
55 
56 
57     }
58     public class Student : Person
59     {
60         private int _id;
61         public int Id
62         {
63             get { return _id; }
64             set { _id = value; }
65         }
66         public void study()
67         {
68             Console.WriteLine("好好学习,天天向上");
69         }
70         public Student(string name, int age, char gender, int id) : base(name, age, gender)
71         {
72             this.Id = id;
73         }
74        
75 
76     }
77     public class Teacher : Person
78     {
79         private int _id;
80         public int Id
81         {
82             get { return _id; }
83             set { _id = value; }
84         }
85         public void Teach()
86         {
87             Console.WriteLine("教育学生");
88         }
89         public Teacher(string name, int age, char gender, int id) : base(name, age, gender)
90         {
91             this.Id = id;
92         }
93     }
94 }