« 愚人节TOEFL Word List 1 »

Some Final Object Concepts---对象概念末论

一个重要的概念“多态(polymorphism)”
在《韦氏大词典》中定义“可以呈现不同形式的能力或状态”。
说简单点,就是同样一条消息(语句调用),响应消息的方法代码因为对象的不同而不同。
举个例子:

一次学校组织活动“师生联谊”,那么有教授 Professor 参加,也有学生 Student 参加。那么活动负责人(Web App.)就要把参加者的名单统计出来,结果统计成一个数组 Person[] 。意思就是只要参加活动的教授或学生都将其放入这个数组。

那么活动开始有个环节叫自我介绍 SelfIntro() ,不同的人自我介绍的内容不一样。教授介绍自己的毕业学校,现在所属的学院,自己所教授的课程等等。而学生介绍自己的学院,系别,专业,兴趣等等。学生和教授自我介绍的内容不一样。

那么活动开始了,主持人只要说一句话: Person[i].SelfIntro(); 就可以让每个人依次进行自我介绍。轮到教授的时候他知道该说他的内容,轮到学生的时候也知道该说学生的内容。但主持人只对他们说了同样的一句话,就可以达到这种效果。

这就是多态。

那么我们延伸程序里面,肯定之前主持人将教授和学生从 0 开始编号,然后自己建个 for 循环,控制 i 变量计数。
还有就是在 Person 类里面一定有个 SelfIntro() 方法。可以是虚方法,也可以是抽象方法。如果是虚方法,一定内容是介绍自己的姓名年龄等等这些教授或学生都会介绍的公共属性;如果是抽象方法,就不用写任何内容,只要一个 abstract 加在前面等后面的子类覆载就行了。

所以由上面的例子看得出来,多态是建立在继承和覆载基础之上的。

抽象(Abstract Class)
抽象类列举一个类所需要的行为,但不明确提供每个行为的具体实现方法。而那些只给出方法头,却没有编写相应的方法体的方法叫抽象方法(abstract method)


含有抽象方法的类就叫做抽象类,那么在声明的时候必须加上 abstract 。否则会报错。
抽象类是不能够实体化的,因为有的方法只有方法头,没有方法体。所以我们必须 override 那些 abstract 的方法,才能使子类能够顺利实体化。如果在继承后依然有抽象方法没有被覆载的话,那么子类前面也应该加上 abstract ,而且同理不能被实体化。

接口(Interface)


接口ITeacher里面的方法都是默认的 public abstract 。所以不用再为其加上这2个关键字,否则编译器会报错。

抽象类基本就是有抽象方法也有一般方法,而接口只有抽象方法。所以两者有一定的联系。

接口说白了就是某种类型的描述,如果你继承了接口,你也同时可以看做可以做“接口的事”,比如上面的意思是 Professor 也是老师。

如果有两个或者多个类同时继承了某接口,那么我用某接口申明的变量对这两类同时适用。


类可以同时继承其他类和接口,但是只能继承一个其他类而且只能放在继承列表的第一个,后面的跟接口。

静态特征(Static Feature)
举个例子:

所以依据这个原理,出来很多用具类(Utility Class)比如 Math.Sqrt(i) 。。

常量,就是第一次给点初始值之后就不会变化的量。


主要内容就这些了。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。