一. 面向对象思想
1. 面向过程(OP)和面向对象(OO)的区别:
(1):面向过程就是排着用最简单的代码一步一步写下去,没有封装,当业务复杂的时候,改动就很麻烦了
(2):面向对象将复杂的业务分离出来几个类,然后将业务封装到类中的方法进行实现,很简洁。
2. 面向对象的三大特征
(1). 封装:将一些行为以类为单位进行包裹起来,然后通过类进行调用(如People类),可以利用private、public、protected灵活控制属性的可访问性。
好处:
①:保证数据安全(灵活使用private、public、protected进行控制)
②:屏蔽细节,只要方法名不变,可以随意扩展。
③:代码重用
(2). 继承:通过继承,子类可以拥有父类的一切动作(如Student类继承People类)
(3). 多态:多态有很多种。,
(补充“老杨”的经典语录:父类类型的变量可以指向子类类型的对象,调用方法的时候调用的是子类对象的实现。里氏替换原则是多态的另一种叫法,如下面的例子④)
①:通过不同子类继承同一个父类,实现多态(类似的还有子类继承抽象类、或者实现接口)
②:方法的重载本身就是一种多态
③:利用默认参数实现方法多态(利用命名参数实现方法的重载,即方法的多态)
④:运行时的多态(里氏替换原则,声明父类对象,调用虚方法,在子类覆写或者不覆写的情况下,分别调用子类方法或父类方法《只有在运行的时候才知道》)
实体类代码:
1 /// <summary> 2 /// People对一些行为进行封装 3 /// </summary> 4 public class People 5 { 6 public int age { get; set; } 7 8 private string name { get; set; } 9 10 protected string Sex { get; set; } 11 12 13 public void Play() 14 { 15 Console.WriteLine("play方法"); 16 } 17 18 /// <summary> 19 /// 子类可以对其覆写也可以不进行覆写 20 /// </summary> 21 public virtual void VirtualMethord1() 22 { 23 Console.WriteLine("我是父类中的虚方法"); 24 } 25 } 26 27 /// <summary> 28 /// 继承People类 29 /// </summary> 30 public class Student : People 31 { 32 33 /// <summary> 34 /// overload 方法重载实现方法的多态,同名方法不同实现形式 35 /// </summary> 36 /// <param name="id"></param> 37 public void Show(int id) 38 { 39 Console.WriteLine($"id为:{id}"); 40 } 41 public void Show(string id) 42 { 43 Console.WriteLine($"id为:{id}"); 44 } 45 public void Show(int id, string name) 46 { 47 Console.WriteLine($"id为:{id},name为:{name}"); 48 } 49 50 /// <summary> 51 /// 利用命名参数实现方法的重载,即方法的多态 52 /// </summary> 53 /// <param name="id"></param> 54 /// <param name="name"></param> 55 public void play(int id,string name = null) 56 { 57 if (name!=null) 58 { 59 Console.WriteLine($"id为:{id},name为:{name}"); 60 } 61 else 62 { 63 Console.WriteLine($"id为:{id}"); 64 } 65 } 66 67 68 public override void VirtualMethord1() 69 { 70 //base.VirtualMethord1(); //调用父类的虚方法 71 Console.WriteLine("我是子类中对方法的覆写"); 72 } 73 74 } 75 /// <summary> 76 /// 继承People类 77 /// </summary> 78 public class Teacher : People 79 { 80 }