| 
49 | 49 | 
 
  | 
50 | 50 | 大聪明鬼,这就是 Go 语言面向对象的简单实现了!!!  | 
51 | 51 | 
 
  | 
 | 52 | +把属性和行为塞(封装)到结构体里面之后,和之前的面向过程有什么不一样?  | 
 | 53 | + | 
 | 54 | +之前的函数调用,学生属于形参,是传进去的。 `getInfo(user)` ,  | 
 | 55 | +而现在,学生是调用方,是主体, `user.GetInfo()`。  | 
 | 56 | + | 
 | 57 | +换句话说,之前的函数调用, 操作的是外部的数据信息。而现在,变量(属性)操作(方法)  | 
 | 58 | +成为了类型的一部分,是固有的。一旦这个类型建立了,那它对应的变量什么的,也都直接附带上了。  | 
 | 59 | +同时,利用对象调用方法,更像是一种「操作」,什么叫操作?就是,我这个对象,里面有些数据,  | 
 | 60 | +通过调用某个方法,修改了对象内的一些信息,「操作」了一下。就这么先这么狭义理解。  | 
 | 61 | + | 
 | 62 | + | 
52 | 63 | 有个小细节需要注意,当函数和对象结合的时候,它就不叫函数了,叫「方法」。任何语言都是如此。   | 
53 | 64 | 
 
  | 
54 | 65 | 不同语言面向对象的实现方法都不一样,大部分面向对象的语言,都是用 `class` 关键字实现的,  | 
@@ -110,11 +121,15 @@ A类 `继承` B类,表明,A类拥有B类的所有属性(特征)和方法  | 
110 | 121 | 
 
  | 
111 | 122 | 其实,我们可以定义一个「学校师生」父类,「学生类」和「教职工」类分别继承它。  | 
112 | 123 | 「学校师生」类可以定义一个「查询信息」方法,然后另外两个类 `重写` 这个方法。  | 
 | 124 | +即,父类有个 `getInfo()` 的方法,两个子类也各有一个 `getInfo()` 的同名方法。  | 
113 | 125 | 
 
  | 
114 | 126 | 这么做有什么好处?怎么还不讲多态???  | 
115 | 127 | 
 
  | 
116 | 128 | 多态有很多种,这里讲一种。比如,你可以定义一个基类的变量(指针),它是可以引用(指向)  | 
117 |  | -所有父类的。换句话说,你可以定义一个「学校师生」类的变量,无论是传了「学生类」还是「教职工」类的对象,  | 
118 |  | -编译器都能找到对应的方法,即,它知道该调用哪个查询信息的方法。  | 
 | 129 | +所有父类的。换句话说,你可以定义一个「学校师生」类的变量,  | 
 | 130 | +然后查询信息的时候,直接调用 `父类.getInfo()`  | 
 | 131 | +无论你是通过「学生类」还是「教职工」类的对象调用的这个方法,  | 
 | 132 | +编译器都能找到对应的方法,即,它知道该调用哪个查询信息的方法,即,  | 
 | 133 | +如果是学生调用这个方法,就查询学生信息,如果是老师就查询老师信息。非常的阳间。  | 
119 | 134 | 
 
  | 
120 | 135 | 未完待续。。。  | 
0 commit comments