C#第七天

1.继承:我们可能会在一些类中,写一些重要的成员,将这些重复的成员单独的封装到一个类中,作为这些类的父类。

Student    Teacher     Driver                             子类     也叫派生类

Person                                                            父类     也叫基类

子类继承了父类,那么子类从父类那里继承过来了什么

首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。

2.子类不能继承父类的构造函数,但是,子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。

所以,如果父类中重新写了一个有参数的构造函数之后,那么无参数的就被干掉了。

子类就掉用不到了,所以子类会报错。

解决方法:

1.在父类中重新写一个无参数的构造函数。

2.在子类中显示父类的构造函数,使用关键字:base()

3.继承的特性

1).继承的单根性:一个子类只能继承继承一个父类。

2).继承的传递性。

4. object是所有类的基类。

5.new关键字
1)、创建对象
2)、隐藏从父类那里继承过来的同名成员。
隐藏的后果就是子类调用不到父类的成员。

里氏转换法:

1、里氏转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。

2、
子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。

3、
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null

 1  static void Main(string[] args)
 2         {
 3             //1、里氏转换
 4             //1)、子类可以赋值给父类,如果有一个地方需要父类作为参数,我们可以给一个子类来代替             
 5             //Student s = new Student();
 6             //Person p = s;
 7              Person p = new Student();
 8             //string str = string.Join("|", new string[]{"1","2","3","4"});
 9             //Console.WriteLine(str);
10             //Console.ReadKey();
11             //2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
12              //if (p is Student)
13              //{
14              //    Student ss = (Student)p;
15              //    ss.StudentSayHello();
16                  
17              //}
18              //else
19              //{
20              //    Console.WriteLine("转换失败");
21              //}
22             //as用法
23             Student t=p as Student;
24             t.StudentSayHello();
25 
26              Console.ReadKey();
27         }
28         public class Person
29         {
30             public void PersonSayHello()
31             {
32                 Console.WriteLine("我是父类");
33             }
34         }
35         public class Student : Person
36         {
37             public void StudentSayHello()
38             {
39                 Console.WriteLine("我是学生");
40             }
41         }
42         public class Teacher:Person
43         {
44             public void TeacherSayHello()
45             {
46                 Console.WriteLine("我是老师");
47             }
48         }
View Code

里氏转换小练习:

  1 namespace 里氏转换法练习
  2 {
  3     class Program
  4     {
  5         static void Main(string[] args)
  6         {
  7             //创建一个对象,通过一个循环,来调用他们打招呼的方法
  8             //Student s = new Student();
  9             //Person p = new Person();
 10             //ShuaiGuo sg = new ShuaiGuo();
 11             Person[] pers = new Person[10];
 12             Random r = new Random();
 13             for (int i = 0; i < pers.Length; i++)
 14             {
 15                 int rNumber = r.Next(1, 7);//产生一个1-6的随机数;
 16                 switch (rNumber)
 17                 {
 18                     case 1: pers[i] = new Student();
 19                         break;
 20                     case 2: pers[i] = new Teacher();
 21                         break;
 22                     case 3: pers[i] = new ShuaiGuo();
 23                         break;
 24                     case 4: pers[i] = new MeiNv();
 25                         break;
 26                     case 5: pers[i] = new YeShou();
 27                         break;
 28                     case 6: pers[i] = new Person();
 29                         break;
 30                 }
 31             }
 32             for (int i = 0; i < pers.Length; i++)
 33             {
 34                 if (pers[i] is Teacher)
 35                 {
 36                     ((Teacher)pers[i]).TeacherSayHi();
 37                 }
 38                 else if (pers[i] is YeShou)
 39                 {
 40                     ((YeShou)pers[i]).YeShouSayHi();
 41                 }
 42                 else if (pers[i] is MeiNv)
 43                 {
 44                     ((MeiNv)pers[i]).MeiNvSayHi();
 45                 }
 46                 else if (pers[i] is Student)
 47                 {
 48                     ((Student)pers[i]).StudentSayHi();
 49                 }
 50                 else if (pers[i] is ShuaiGuo)
 51                 {
 52                     ((ShuaiGuo)pers[i]).ShuaiGuoSayHi();
 53                 }
 54                 else
 55                 {
 56                     pers[i].PersonSayHi();
 57                 }
 58             }
 59             Console.ReadKey();
 60         }
 61 
 62     }
 63     public class Person
 64     {
 65         public void PersonSayHi()
 66         {
 67             Console.WriteLine("我是人类");
 68         }
 69     }
 70     public class Student : Person
 71     {
 72         public void StudentSayHi()
 73         {
 74             Console.WriteLine("我是学生");
 75         }
 76     }
 77     public class Teacher : Person
 78     {
 79         public void TeacherSayHi()
 80         {
 81             Console.WriteLine("我是老师");
 82         }
 83     }
 84     public class MeiNv : Person
 85     {
 86         public void MeiNvSayHi()
 87         {
 88             Console.WriteLine("我是美女");
 89         }
 90     }
 91     public class ShuaiGuo : Person
 92     {
 93         public void ShuaiGuoSayHi()
 94         {
 95             Console.WriteLine("我是帅锅");
 96         }
 97     }
 98     public class YeShou : Person
 99     {
100         public void YeShouSayHi()
101         {
102             Console.WriteLine("我是菜狗");
103         }
104     }
105 }
View Code
原文地址:https://www.cnblogs.com/ggsdduzbl/p/4933394.html