面向对象面向对象的核心是把一类事物所具有的数据属性和行为方法封装在一起形成一个独立的单元这个单元在代码层面通常由‌类‌来定义而‌对象‌是类的实例化结果。‌‌面向对象具有封装、继承、多态的特性。面向对象这些特性实现了数据安全保护、代码的复用、灵活拓展。简单理解类是“设计图纸”对象是“实体产品”‌。数据和行为被封装在类中通过创建对象来使用这些数据和行为。封装解释将对象的数据属性和行为打包在一起隐藏内部实现细节只暴露必要的公开接口方法供外部交互。意义解决数据安全和维护问题。继承解释子类可以通过继承父类的属性和方法并在此基础上进行拓展或重写。意义解决代码复用和拓展问题多态解释同一个操作作用于不同的对象产生不同的执行结果。核心是父类引用指向子类对象调用时动态绑定到子类的实现。意义解决代码的拓展性和灵活性问题。举列子说明封装特性//封装//举例将人所用具有的共同属性和行为封装成一个类。publicclassPerson{//字段字段数据不能直接获取只能同属性进行获取//字段用 private 访问修饰符私有的。privatestring_name;//属性可以对用户传入的数据进行控制同时也保护住字段数据的安全性。publicstringName{get{return_name;}set{_namevalue;}}privateint_age;publicintAge{get{return_age;}set{//年龄存入的值要在0-100 之间if(value0||value100){value0;}_agevalue;}}privatechar_gender;publiccharGender{get{if(_gender!男_gender!女){return_gender男;}return_gender;}}//方法publicvoidCHLSS(){//人所具有的共同行为吃、喝、拉、撒、睡}}代码重点该代码主要体现了封装特性将人所具有的属性和行为封装成了一个类。类中字段通过了private 访问修饰符 实现了对于数据的保护使用时只能通过属性进行调用此时就体现了对数据的安全保护。继承特性//继承//特性1、单根性 2、传递性{//定义一个学生类publicclassStudent:Person{privatestring_xueXi;publicstringXueXi{get{return_xueXi;}set{_xueXivalue;}}//写作业publicvoidXieZuoYe(){}}//定义一个老师类publicclassTeacher:Person{privatestring_jiaoKe;publicstringJiaoKe{get{return_jiaoKe;}set{_jiaoKevalue;}}//上课publicvoidShangKe(){}}}调用展现{//创建了一个人类的对象PersonpernewPerson();per.Name张三;per.Age18;per.Gender男;Per.CHLSS();//创建一个学生对象StudentstunewStudent();stu.Name王小;stu.Age13;stu.Gender男;stu.CHLSS();stu.XueXi学习;stu.XieZuoYe();//创建一个老师对象TeacherteanewTeacher();stu.Name刘美丽;stu.Age30;stu.Gender女;stu.CHLSS();stu.JiaoKe教课;stu.ShangKe();}代码重点学生类、老师类都继承了 Person 类学生类、老师类是子类Person类是父类由于继承的传递性子类中可以调用父类中所定义的属性和方法。CHLSS 方法每个人都拥有通过继承就实现了代码的复用。XieZuoYe、ShangKe都是子类各自有用的特殊行为此处体现了代码的拓展性。一个子类只能继承一个父类这体现继承的单根性。多态特性实现多态的三种方法虚方法、抽象类、接口1、虚方法(关键词virtual、override)解释父类中的方法有实际的意义且用virtual进行修饰。子类中可以对虚方法进行重写。{//虚方法//关键词virtual、override//场景公司员工9点上班打卡经理11点上班打卡程序员不打卡//公司中所有人都是一个员工所以可以定义一个员工类。publicclassEmployee{publicvirtualvoidDaKa(){Console.WriteLine(9点打卡);}}//定义一个经理类并继承于员工类publicclassManager:Employee{publicoverridevoidDaKa(){Console.WriteLine(经理11点打卡);}}//定义一个程序员类并继承于员工类publicclassProgrammer:Employee{publicoverridevoidDaKa(){Console.WriteLine(程序猿不打卡);}}}//调用实现{EmployeeempnewEmployee();ManagermgnewManager();ProgrammerpmnewProgrammer();emp.DaKa();mg.Daka();pm.DaKa();}2、抽象类关键词abstract、override解释抽象类中的抽象方法非抽象类必须实现但抽象子类可以不实习而是继续把抽象方法往下传。{//抽象类//关键词 abstract、override//场景求圆形、长方形的周长和面积。//圆形、长方形都是一个形状 所以我们可以定义一个形状的父类//Shape为一个抽象类 GetArea求面积、 GetPerimeter求周长皆为抽象方法abstract修饰且无方法体。publicabstractclassShape{publicabstractstringGetArea();publicabstractdoubleGetPerimeter();}publicclassCircle:Shape{privatedouble_r;publicdoubleR{get{return_r;}set{_rvalue;}}publicCircle(doubler){this.Rr;}publicoverridedoubleGetArea(){returnMath.PI*this.R*this.R;}publicoverridedoubleGetPerimeter(){return2*Math.PI*this.R;}}publicclassSquare:Shape{privatedouble_height;publicdoubleHeight{get{return_height;}set{_heightvalue;}}privatedouble_width;publicdoubleWidth{get{return_width;}set{_widthvalue;}}publicSquare(doubleheight,doublewidth){this.Heightheight;this.Widthwidth;}publicoverridedoubleGetArea(){returnthis.Height*this.Width;}publicoverridedoubleGetPerimeter(){return(this.Heightthis.Width)*2;}}}调用实现{//‌抽象类不能被实例化抽象方法的调用必须通过子类来实现‌ShapeshapenewSquare(5,6);//new Circle(5);doubleareashape.GetArea();doubleperimetershape.GetPerimeter();}3、接口关键词interface解释接口定义了一组方法的签名规范但不含具体的实现代码用来约定“做什么”而不关心 “怎么做”。光说不做publicinterfaceIDrawable{voidDraw();}publicclassCircle:IDrawable{publicvoidDraw(){Console.WriteLine(Drawing a circle);}}publicclassSquare:IDrawable{publicvoidDraw(){Console.WriteLine(Drawing a square);}}// 使用接口的多态IDrawableshapenewCircle();shape.Draw();// 输出: Drawing a circleshapenewSquare();shape.Draw();// 输出: Drawing a square1、接口不能被实例化。2、实现类必须实现接口的全部成员。3、一个类可以实现多个接口。4、接口成员默认是public。5、接口可以继承接口。