一. 面向对象思想

1. 面向过程(OP)和面向对象(OO)的区别:

 (1):面向过程就是排着用最简单的代码一步一步写下去,没有封装,当业务复杂的时候,改动就很麻烦了

 (2):面向对象将复杂的业务分离出来几个类,然后将业务封装到类中的方法进行实现,很简洁。

2. 面向对象的三大特征

(1). 封装:将一些行为以类为单位进行包裹起来,然后通过类进行调用(如People类),可以利用private、public、protected灵活控制属性的可访问性。

好处:

 ①:保证数据安全(灵活使用private、public、protected进行控制)

 ②:屏蔽细节,只要方法名不变,可以随意扩展。

 ③:代码重用

(2). 继承:通过继承,子类可以拥有父类的一切动作(如Student类继承People类)

(3). 多态:多态有很多种。,

(补充“老杨”的经典语录:父类类型的变量可以指向子类类型的对象,调用方法的时候调用的是子类对象的实现。里氏替换原则是多态的另一种叫法,如下面的例子④)

 ①:通过不同子类继承同一个父类,实现多态(类似的还有子类继承抽象类、或者实现接口)

 ②:方法的重载本身就是一种多态

 ③:利用默认参数实现方法多态(利用命名参数实现方法的重载,即方法的多态)

 ④:运行时的多态(里氏替换原则,声明父类对象,调用虚方法,在子类覆写或者不覆写的情况下,分别调用子类方法或父类方法《只有在运行的时候才知道》)

 实体类代码:

第一节:从面向对象思想(oo)开发、接口、抽象类以及二者比较
 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     }
View Code

相关文章: