程序员开发实例大全宝库

网站首页 > 编程文章 正文

java 核心技术-12版 卷Ⅰ- 6.1.3 接口与抽象类

zazugpt 2024-08-21 04:04:36 编程文章 23 ℃ 0 评论

原文

6.1.3 接口与抽象类

如果阅读了第5章中有关抽象类的那一节,可能会产生这样一个疑问:为什么Java 程序设计语言的设计者要那么麻烦地引人接口概念呢?为什么不将 Comparable 直接设计成一个抽象类呢?如下所示:

abstract class Comparable // why not?
{
	public abstract int compareTo(Object other);
}

这样一来,Employee 类只需要扩展这个抽象类,并提供 compareTo 方法:

class Employee extends Comparable // why not?
{

public int compareTo(Object other){ ... }
}

非常遗憾,使用抽象基类表示通用属性存在一个严重的问题。每个类只能扩展一个类假设 Employee 类已经扩展了另一个类,例如 Person,它就不能再扩展第二个类了。

class Employee extends Person, Comparable // ERROR

但每个类可以实现任意多个接口,如下所示:

class Employee extends Person implements Comparable // OK

?其他程序设计语言(尤其是 C++) 允许一个类有多个超类。这个特性称为多重继承 multiple inheritance)。Java 的设计者选择不支持多重继承,其主要原因是多重继承会让语言变得非常复杂(如 C++),或者效率会降低(如 Eiffel)。

?实际上,接口可以提供多重继承的大多数好处,同时还能避免多重继承的复杂性和低

效性。

?CC++ 注释: C++ 允许多重继承,随之也带来了一些复杂的特性,如虚基类、控制规则和横向指针类型转换,等等。很少有 C++ 程序员使用多重继承,甚至有些人说就不应该使用多重继承。也有些程序员建议只对“混合”风格的继承使用多重继承。在“混合”风格中,一个主要基类描述父对象,其他的基类(所谓的混合类) 提供辅助特性这种风格类似于一个 Java 类扩展一个超类并实现多个接口。


?提示:第3章中我们已经见过CharSequence 接口。String和 StringBuilder (以及另外一些神秘的“类字符串”(string-like)类)都实现了这个接口。这个接口包含所有管理字符序列的类的公共方法。有一个共同的接口会鼓励程序员编写使用 CharSequence 接口的方法。那些方法可以处理String、StringBuilder和其他“类字符串”类的实例。

?可惜 CharSequence 接口很简单。你可以得到字符序列的长度、选代处理码点或代码单元,提取子序列以及按字典顺序比较两个序列。Java 17 增加了一个isEmpty 方法。

?如果你要处理字符串,而那些操作已经能满足你的任务要求,则可以接受CharSequence 实例而不是字符串。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表