Java语言精粹 第二章 类型系统

1.  Java是单继承语言。 

多继承能做的所有事情使用单继承和代理(delegation)也能拿做的一样好(且不会有多继承那么复杂)。

一个类可以实现任意多个接口,而拓展类必须实现被拓展类所实现的所有接口(虽然他还可以实现其他接口)。与类相似,接口也定义了一种类型,实现某个接口的类实例同时也是该接口类型的实例。

介于类与接口之间的是抽象类,与类相同,一个类只能拓展单个抽象类,抽象类是单继承树的一部分。

2.  从历史上看,计算机语言适用类型是为了让编译器确定类型所关联的对象所需要分配多少内存空间。

类型也被用来描述方法的参数与返回值,使编译器和运行时系统能够知道这些实体的尺寸。

事实上,接口体现了类型系统更重要的用处,那就是对传入方法的参数的方法中传出的返回值做编译时检查。这使java语言做到了类型安全,也就是,从方法中传入(或从中传回)类型错误的对象是不可能的。

3. 实现接口时,既然关于方法名、输入参数和返回值的所有信息都要在实现类中重新输入一遍,为什么还要声明接口呢?

·类型系统之所以能后才能为最优良的特性,接口有很大功劳。接口定义了类使之具体。不同的类可以按不同的方式将接口具体化,但他们仍然拥有接口所给出的相同的抽象。Java提供了一种方式来表达这些不同实现的共同之处,这使语言的强项,而不是弱点。

要求实现接口的类重复接口中出现的方法声明也是语言的强项而不是弱点。把方法签名的声明与实现方法的类分开,编译器就能查出程序员改变了方法签名或拼错了方法名的情况。

正式在方法参数和返回值的生命中,接口概念第一次显得重要起来。编译器要求传入方法或从方法中返回的对象必须符合声明的类型。但这些对象的精确类型不必与声明的类型完全一致;编译器只要求他们"至少是"那种类型。如果声明中的类型是有那个类定义的,那么该类的任何子类实例都可以使用。

接口更重要的理由在于他理清了一个系统的整体设计的方法。恰当的设计中,接口定义语义单元,那就是一套相互赋予含义的操作。从这点来看,在Java程序或者由Java程序组成的系统中,应把接口看作是含义的基本单元。

在接口定义的操作,其语意又是什么呢?要回答这个问题,就要谈到实现接口的对象,且要从内部表示说起。我们可以说任何实现Batter接口的类,其对象中多会有状态变量保存着击球次数以及与击球相关的各种统计结果。但这种解释预先假设了Batter对象的实现,而实际实现未必如此。毕竟,某个类的实现完全可以基于另一种内部表示:通过各种统计结果反推出击球总数,或者在需要时动态计算各种平均数。我们使用面向对象技术,原因之一就是要支持这种变数:允许不同的实现策略,但他们不会改变接口的语义。这就意味着我们需要一种语义概念,即与实现分离的接口。

如果不引用其他接口的方法便不能描述某个接口的语义,那就说明这两个接口相互依赖,而这种依赖关系应通过某种方式反映出来。如果必须引用类实现中的信息才能描述接口中某种操作的语义,则说明接口依赖于实现细节,用户的设计出了问题。


未完 8.8.2015

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值