C#第七天
2015-11-05 12:56
357 查看
一
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
View Code
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
namespace 里氏转换法练习 { class Program { static void Main(string[] args) { //创建一个对象,通过一个循环,来调用他们打招呼的方法 //Student s = new Student(); //Person p = new Person(); //ShuaiGuo sg = new ShuaiGuo(); Person[] pers = new Person[10]; Random r = new Random(); for (int i = 0; i < pers.Length; i++) { int rNumber = r.Next(1, 7);//产生一个1-6的随机数; switch (rNumber) { case 1: pers[i] = new Student(); break; case 2: pers[i] = new Teacher(); break; case 3: pers[i] = new ShuaiGuo(); break; case 4: pers[i] = new MeiNv(); break; case 5: pers[i] = new YeShou(); break; case 6: pers[i] = new Person(); break; } } for (int i = 0; i < pers.Length; i++) { if (pers[i] is Teacher) { ((Teacher)pers[i]).TeacherSayHi(); } else if (pers[i] is YeShou) { ((YeShou)pers[i]).YeShouSayHi(); } else if (pers[i] is MeiNv) { ((MeiNv)pers[i]).MeiNvSayHi(); } else if (pers[i] is Student) { ((Student)pers[i]).StudentSayHi(); } else if (pers[i] is ShuaiGuo) { ((ShuaiGuo)pers[i]).ShuaiGuoSayHi(); } else { pers[i].PersonSayHi(); } } Console.ReadKey(); } } public class Person { public void PersonSayHi() { Console.WriteLine("我是人类"); } } public class Student : Person { public void StudentSayHi() { Console.WriteLine("我是学生"); } } public class Teacher : Person { public void TeacherSayHi() { Console.WriteLine("我是老师"); } } public class MeiNv : Person { public void MeiNvSayHi() { Console.WriteLine("我是美女"); } } public class ShuaiGuo : Person { public void ShuaiGuoSayHi() { Console.WriteLine("我是帅锅"); } } public class YeShou : Person { public void YeShouSayHi() { Console.WriteLine("我是菜狗"); } } }
View Code
相关文章推荐
- C#运算除法和求整
- C#中的重载
- C#中的ref和out关键字
- C#.NET中遍历指定目录下的文件(及所有子目录及子目录里更深层目录里的文件)
- C#接口作用
- C#的textbox的LostFocus事件重复执行
- 使用C#在CEF中拦截并响应请求
- C#中比较常用的DateTime结构的使用方法
- C#跟踪和调试程序-Debug类使用
- C#影院售票系统毕业设计(2)
- C#影院售票系统毕业设计(1)
- C# 委托简单例子
- C#中的序列化与反序列化
- XPath语法 在C#中使用XPath示例
- C#GridView中RadioButton选中显示不正确问题!
- C# trim split dataGrid
- C#总结项目《影院售票系统》编写总结二
- 第一次C#作业
- C#学习单向链表和接口 IList<T>
- Parallel dev: .NET SynchronizationContext 二三事