亚里士多德或许是认真研究“类型”概念的第一人,他曾谈及“鱼类和鸟类”的问题。在世界首例面向对象 语言Simula-67 中,第一次用到了这样的一个概念: 所有对象——尽管各有特色——都属于某一系列对象的一部分,这些对象具有通用的特征和行为。在 Simula-67 中,首次用到了class 这个关键字,它为程序引入了一个全新的类型(clas 和 type 通常可互换使 用;注释③)。
③:有些人进行了进一步的区分,他们强调“类型”决定了接口,而“类”是那个接口的一种特殊实现方 式。
Simula是一个很好的例子。正如这个名字所暗示的,它的作用是“模拟”(Simulate)象“银行出纳员”这 样的经典问题。在这个例子里,我们有一系列出纳员、客户、帐号以及交易等。每类成员(元素)都具有一 些通用的特征:每个帐号都有一定的余额;每名出纳都能接收客户的存款;等等。与此同时,每个成员都有 自己的状态;每个帐号都有不同的余额;每名出纳都有一个名字。所以在计算机程序中,能用独一无二的实 体分别表示出纳员、客户、帐号以及交易。这个实体便是“对象”,而且每个对象都隶属一个特定的 “类”,那个类具有自己的通用特征与行为。 因此,在面向对象的程序设计中,尽管我们真正要做的是新建各种各样的数据“类型”(Type),但几乎所 有面向对象的程序设计语言都采用了“class”关键字。当您看到“type”这个字的时候,请同时想到 “class”;反之亦然。 建好一个类后,可根据情况生成许多对象。随后,可将那些对象作为要解决问题中存在的元素进行处理。事 实上,当我们进行面向对象的程序设计时,面临的最大一项挑战性就是:如何在“问题空间”(问题实际存 在的地方)的元素与“方案空间”(对实际问题进行建模的地方,如计算机)的元素之间建立理想的“一对 一”对应或映射关系。 如何利用对象完成真正有用的工作呢?必须有一种办法能向对象发出请求,令其做一些实际的事情,比如完 成一次交易、在屏幕上画一些东西或者打开一个开关等等。每个对象仅能接受特定的请求。我们向对象发出 的请求是通过它的“接口”(Interface)定义的,对象的“类型”或“类”则规定了它的接口形式。“类 型”与“接口”的等价或对应关系是面向对象程序设计的基础。
1 package Com.TomTest; 2 3 class Fibi{ 4 public static long fibinacii(int n) { 5 long c=0; 6 if(n==1||n==2) 7 c=1; 8 else 9 c=fibinacii(n-1)+fibinacii(n-2); 10 return c; 11 } 12 } 13 public class TomTest_19 { 14 public static void main(String args[]){ 15 System.out.println(Fibi.fibinacii(7)); 16 } 17 }