标签:
一
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 }
里氏转换小练习:
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 }
标签:
原文地址:http://www.cnblogs.com/ggsdduzbl/p/4933394.html