第八章 - 接口

2026/1/18 13:08:39

Java程序设计入门与精通

第八章

接口与包 教学提示:Java里有两个很重要的概念——接口和抽象类,它们是类概念的扩展。接口是Java中实现多重继承的重要方法。接口的扩展与类的继承类似,但还是有所区别。抽象类则有点类似于“模板”的作用。内部类是Java语言的一个重要附加物,主要用在图形界面编程方面。包被认为是Java的重要特色之一,它体现了OOP的封装思想,为Java中管理大量的类和接口提供了方便。

教学目标:理解Java中接口和抽象类的定义和实现,以及使用方法和技巧。理解内部类在编程中的巧妙应用。理解Java对类的管理机制。

8.1 接口

8.1.1 什么是接口

Java只支持单重继承机制,不支持多重继承,即一个类只能有一个超类。单继承性使得Java结构简单,层次清楚,易于管理,更安全可靠,从而避免了C++中因多重继承而引起的难以预测的冲突。但在实际应用中也需要使用多重继承功能,例如,交通工具类有车辆、飞机、船舶3个子类,各个子类又有它们各自的子类,如图8-1所示。

交通工具 车辆 飞机船舶 非机动车 汽车 喷气式飞机 柴油机船 帆船 燃油 图8-1 多重继承的示意图

其中继承树的叶端类,如汽车、喷气飞机、柴油机船,它们都是使用燃油产生动力,因而它们也会有许多关于燃油的相同的属性和方法,如载油量、每公里耗油量、剩余油量,等属性,以及加油、耗油等方法,如果把这些属性和方法都放入到各个子类中,那么这些子类将有很多相同的内容,类的定义也显得很复杂,同时也不好管理各个类中这方面的内容。如果像C++中那样,子类可以继承多个父类的属性和方法,这个问题就很好解决,设计一个燃油类,

128

第八章 接口

用来统一管理燃油这方面的内容,然后汽车、喷气飞机、柴油机船这些子类再从这个燃油类中继承所需的属性和方法,这些类的定义也就变得很简单,管理也方便。但Java中并不允许多重继承,所以Java提供了接口(interface)来解决这类问题。

接口是用来实现类似多重继承功能的一种结构,它在语法上和类很相似,它也有属性和方法,接口间也可以形成继承关系。但接口和类有着很大的区别,它的属性都是常量,方法都是抽象方法,没有方法体,所以它的名字也就称为“接口”。接口只是一个口,里边是空的。在上面的例子中,Java允许定义一个接口:燃油,它可以有一些常量属性和抽象方法,然后在汽车、喷气飞机、柴油机船中分别具体化接口的方法,这样就相当于实现了多重继承。

接口的使用方法是:首先定义一个接口,可以先把它理解成一个特殊的类,然后在某个类中要使用这个接口时,就在这个类的定义时声明要实现某个接口,就相当于多重继承中子类声明它要继承另一个父类。从结构上说,接口有如下特点:

⑴接口用关键字interface来定义,而不是class。

⑵接口中定义的变量全部是静态变量,而且都是最终的静态变量。

⑶接口中没有自身的构造方法,而且定义的方法都是抽象方法,即只提供方法的定 义,而不提供具体的实现。

⑷ 接口采用多重继承机制,而不是采用类的单重继承机制。

8.1.2 接口的定义

接口的定义包括接口声明和接口体两部分。格式为: <修饰符> interface <接口名> {

接口体

} 1.接口声明

接口声明的格式如下:

[public] interface 接口名 [extends 父接口列表] {

...... }

其中public指明任意类均可以使用这个接口,也可以省略。省略时,接口使用默认的访问控制,即接口只能被与它处在同一包中的成员访问。extends子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有的常量和方法。

2.接口体

接口体中包含常量定义和方法定义两部分。

在接口中定义的常量默认具有public、final、static的属性。常量定义的具体格式为:

type NAME=value;

其中type可以是任意类型,NAME是常量名,通常用大写,value是常量值。在接口

129

Java程序设计入门与精通

中定义的常量可以被实现该接口的多个类共享。

在接口中声明的方法默认具有public和abstract属性。方法定义的格式为: returnType methodName([Daramlist]);

在接口中的方法method只有定义没有实现,即接口中的方法都是抽象方法,所以实际上接口就是一种特殊的抽象类,这意味着在定义接口时不必考虑怎样实现接口。

【例8-1】 声明接口。

本例声明了接口Student_info表示学生情况,其中有一个成员变量INSCHOOLYEAR和两个成员方法age和output。程序如下:

interface Student_info //学生情况接口 { int INSCHOOLYEAR=2006; int age(); void output();

}

8.1.3 接口的实现与使用

一旦定义了一个接口,一个或更多的类就能实现这个接口。为了实现接口,类必须实现定义在接口中的方法,每个类能自由地决定方法具体实现的细节。Java提倡充分地利用多态性中的“一个接口,多个方法”的特性。

接口的实现类似于继承,只是不用extends,而是用关键字implements声明一个类将实现一个接口,其声明格式如下:

[<修饰符>] class<类名>[extends<超类名>][implements<接口名1>,<接口名2>,…] 其中,<修饰符>可以是public,也可以省略。如果一个类实现一个接口,则必须实现接口中的所有方法,且方法必须声明为public。如果一个类实现多个接口,则用逗号分隔接口列表。

类的声明中用implements子句来表示一个类实现了某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分隔。

在类中实现接口所定义的方法时,方法的声明必须与接口中所定义的完全一致。 【例8-2】通过接口实现多态示例。 设计思路:设计一个接口 Shape,定义两个方法:draw()、erase(),在Circle类、Square类和Triangle类的draw()方法、erase()方法具体实现这两个方法的功能。 代码://file name:NewShapes.java import java.util.*;

//将Shape定义为interface interface Shape{ void draw(); void erase();

130

第八章 接口

}

//定义Circle类实现Shape class Circle implements Shape{ public void draw(){ System.out.println(\ }

public void erase(){ System.out.println(\ } }

//定义Square类实现Shape class Square implements Shape{ public void draw(){ System.out.println(\ }

public void erase(){ System.out.println(\ } }

//定义Triangle类实现Shape

class Triangle implements Shape{ public void draw(){ System.out.println(\ }

public void erase(){ System.out.println(\ } }

//包含main()的测试类 public class NewShapes{

static void drawOneShape(Shape s){ s.draw(); }

static void drawShapes (Shape[] ss){ for(int i=0;i

131


第八章 - 接口.doc 将本文的Word文档下载到电脑
搜索更多关于: 第八章 - 接口 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219