细说Java的接口(二)

简介:

9.1.4  接口pk. 抽象类

接口和抽象类虽然有相似之处,即它们都可能有抽象方法。但却有本质的不同。首先在代码编写方面,它们的语法要求存在差异。从这个角度讲,接口是纯粹抽象的类;而抽象类是一般类到接口之间的过渡。表 9.1 列出了接口和抽象类在语法方面的不同。
9.1   接口和抽象类的区别
    

     

静态常量

一般变量

常量

静态变量

静态常量

抽象方法

方法

静态方法

抽象方法

抽象静态方法

使用关键字 interface

使用关键字 abstract

 

可以看出, Java 对接口的语法有严格的限制和要求;而抽象类则是一种松散形式的抽象。它的特例可以和一般类一样,只不过标有关键字 abstract 而已。
接口和抽象类都不能创建对象。它们的不同主要在于应用。抽象类源于 C++ 语言。但在 C++ 中没有 abstract 关键字来定义抽象类,只是利用 virtual 来表示某个将要实现多态的方法,相当于名义抽象类。 Java 中的抽象类,还是 C++ 中名义上的抽象类,一般用来进行和多态有关的运行和操作。
接口的主要用途可以归纳为如下几点:
l   事件处理规范。如 API 中的 EventListener ActionListener WindowListener MouseListener 等等。
l   识别对象规范。如 API 中的 Comparable Cloneable ,等等。
l   输出输入规范。如编程人员自定义的 Printable FileWriter Readable ,等等。
l   连接协议规范。如 Connectable 等。
l   特殊变量规范。如枚举变量协议接口 Enumable
l   高层次组织和控制结构规范。如 API 中的 Collection  接口, List 接口,等等。
l   具有普遍意义的周边和附属功能规范。如 Recycleable Colorable Positionable ,等等。
本章以下小节对接口在这些方面的应用作进一步讨论。表 9.2 列出了接口和抽象类在应用方面的比较。
9.2   接口和抽象类在应用方面的比较
    

    

     

多重继承

一个类可以完善多个接口,即支持间接多重继承。

一个类只可以继承一个抽象类。

第三方开发和
扩展

可以在任何第三方已存在类的代码中实现接口。

为了继承抽象类,第三方类必须重写子类。

like a ”与“ is a

通常对边缘和附属功能提出协议性规范;具有广泛性。

通常定义对象的核心形态和行为。

同性

适用于所有实现共享签名和协议的不同应用。

适用于各种不同的实现、但都基于共同状态和行为源的应用。

自由度

只要“像我”。

必须“是我”。

可维性

相同

相同

速度

相对慢

相对快

简洁性

高。无须关键字,所有数据自动为公有静态常量。所有方法自动为抽象。

低。关键字不可省略。

可扩充性

如果在接口中添加新方法协议,必须修改所有应用它的类的代码。

如果添加完善了的新方法,无须对所有应用它的类进行修改。

9.1.5  常用API接口

        Java API 的每个包中,几乎都规定了接口,以及完善这些接口需要的技术支持和处理的异常。随着本书的深入讨论,将逐步介绍应用和完善一些常用接口的实例。表 9.3 中列出了这些 API 常用接口。
9.3   常用 API 接口
     

常量 / 方法

    

    

讨论章节

Cloneable

无。推荐覆盖 Object.clone()

java.lang

对象拷贝

9

Comparable

int compareTo(Object o)

java.lang

对象排序

10

Runnable

void run()

java.lang

线程运行

14

续表

     

常量 / 方法

    

    

讨论章节

AudioClip

void loop()

void play()

void stop()

java.applet

音频播放

20

ActionListener

void actionPerformed(ActionEvent)

java.awt.event

事件处理

17 18

WindowConstants

int DISPOSE_ON_CLOSE

int DO_NOTHING_ON_CLOSE

int EXIT_ON_CLOSE

int HIDE_ON_CLOSE

javax.swing

窗口控制

18

 























本文转自高永强51CTO博客,原文链接:http://blog.51cto.com/yqgao/178420  ,如需转载请自行联系原作者
相关文章
|
1月前
|
Java
【Java】一个简单的接口例子(帮助理解接口+多态)
【Java】一个简单的接口例子(帮助理解接口+多态)
17 0
|
1月前
|
Java
JAVA接口
JAVA接口
12 0
|
1天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
7天前
|
Java 开发者
探索 Java 的函数式接口和 Lambda 表达式
【4月更文挑战第19天】Java 中的函数式接口和 Lambda 表达式提供了简洁、灵活的编程方式。函数式接口有且仅有一个抽象方法,用于与 Lambda(一种匿名函数语法)配合,简化代码并增强可读性。Lambda 表达式的优点在于其简洁性和灵活性,常用于事件处理、过滤和排序等场景。使用时注意兼容性和变量作用域,它们能提高代码效率和可维护性。
|
8天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
9天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
17 0
|
14天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
35 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
16天前
|
存储 Java
java接口和内部类
java接口和内部类
|
17天前
|
缓存 安全 Java
Java中函数式接口详解
Java 8引入函数式接口,支持函数式编程。这些接口有单一抽象方法,可与Lambda表达式结合,简化代码。常见函数式接口包括:`Function<T, R>`用于转换操作,`Predicate<T>`用于布尔判断,`Consumer<T>`用于消费输入,`Supplier<T>`用于无参生成结果。开发者也可自定义函数式接口。Lambda表达式使实现接口更简洁。注意异常处理和线程安全。函数式接口广泛应用于集合操作、并行编程和事件处理。提升代码可读性和效率,是现代Java开发的重要工具。
29 0
|
17天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
40 0