using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _04封装{ class Program { static void Main(string[] args) { //封装的作用:1.减少了大量的冗余代码 // 2.将一堆难以理解的功能封装起来,但对外提供了一个简单的使用接口,属性封装的是字段 //继承的作用:1.减少了类中的冗余代码 // 2.让类与类之间产生了关系,为多态打下了基础,多态中把子类赋值给父类 //继承的特性:1.单根性:一个子类只能有一个父类 // 2.传递性:爷爷类 父类 子类 往下继承 // 3.里氏转换:子类可以赋值给父类,如果父类中装的是子类对象,则可以将这个父类转换为对应子类对象 //子类赋值给父类,person只能调出父类的对象 Person person = new Student(); //里氏转换 is as : 如果要调出子类对象,需要使用下面关键字,不会抛出异常 //强制转换,语法没错,继承出错,抛出异常 //Teacher t = (Teacher)person; //t.TeacherSay(); // is:返回bool类型,指示是否可以转换 // as:如果转换成功,则返回对象,否则返回null //if (person is Teacher) //{ // ((Teacher)person).TeacherSay(); //} //else //{ // Console.WriteLine("转换失败"); //} Student s = person as Student;//将person转换成student对象 if (s !=null) { s.StudentSay(); } //为什么要用里氏转换:可以把十个子类都赋值给父类,把子类对象当作父类来看。针对父类进行编程,写出通用代码,适应需求的变化,这个也是多态的作用。 //多态的作用:1.虚方法 virtual overwrite // 2.抽象类 abstract overwrite // 3.接口 interface // 多态就是指不同对象(对象之间可以有关系--虚函数、抽象类来实现多态,也可以没有关系--使用接口实现多态)收到相同消息时,会产生不同行为,同一个类在不同场合下表现不同的行为特征(父类可以调用不同子类的函数)。 // 多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,可写出通用代码,适应需求的变化。 // private 当前类中访问,默认修饰符 // protected 类及子类访问,继承中使用 // internal 当前程序集中使用 // protected internal 当前程序集或子类中,或不同程序集中 // public 任何地方 Console.ReadKey(); } //里氏转换:子类可以赋值给父类 class Person { public void PersonSay() { Console.WriteLine("我是父类"); } } class Student : Person { public void StudentSay() { Console.WriteLine("我是学生"); } } class Teacher :Person { public void TeacherSay() { Console.WriteLine("我是老师"); } } }}