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 }