§ 2.6 抽象类与接口
? 本节主要内容
– 抽象方法与抽象类
– 接口的基本概念
– 接口的应用
– 抽象类与接口在实际问题解决中的运用
2.6.1抽象类与抽象方法
? 一个方法如果没有定义方法体,则称该方法为
抽象方法。包含一个或多个抽象方法的类,称
为抽象类。
? 定义抽象类后,其它类可以对它进行扩充并且
通过实现其中的抽象方法,使抽象类具体化。
? Java语言中,用 abstract 关键字来修饰一个类
时,这个类叫做抽象类,用 abstract 关键字来
修饰一个方法时,这个方法叫做抽象方法。
2.6.1抽象类与抽象方法
? 抽象类的语法格式如下
abstract Class{ …} // 抽象类抽象方法的语法格式如下
abstract returnType abstractMethod([paramlist]) //抽象方法
? 抽象类必须被继承,抽象方法必须被重写。抽
象方法只需声明,无需实现,抽象类不能被实
例化。若类中包含了抽象方法,则该类必须被
定义为抽象类。
2.6.2接口
? 接口是抽象类的一种,只包含常量和方法的定
义,而没有方法的实现,且其方法都是抽象方
法。它的用处体现在下面几个方面,
– 1.通过接口实现不相关类的相同行为,而无需考虑
这些类之间的关系。
– 2.通过接口指明多个类需要实现的方法。
– 3.通过接口了解对象的交互界面,而无需了解对象
所对应的类。
2.6.2接口
? 接口的定义包括接口声明和接口体,接口声明
的格式如下,
[public] interface interfaceName[extends
listOfSuperInterface] { … }
其中,extends 子句与类声明的 extends子句基本相同,
不同的是一个接口可有多个父接口,用逗号隔开,
而一个类只能有一个基类。
2.6.2接口
? 接口体包括常量定义和方法定义
– 常量定义格式为
? type NAME = value;
? 该常量被实现该接口的多个类共享,具有 public、
final,static的属性。
– 方法体定义格式为
? returnType methodName([paramlist]);
? 该方法具有 public和 abstract属性
2.6.2接口
? 接口的实现
– 在类的声明中用 implements子句来表示一个类使用
某个接口,在类体中可以使用接口中定义的常量,
而且必须实现接口中定义的所有方法。
– 一个类可以实现多个接口,在 implements子句中用
逗号分开。接口作为一种引用类型来使用。
– 任何实现该接口的类的实例都可以存储在该接口类
型的变量中,通过这些变量可以访问类所实现的接
口中的方法。
2.6.3抽象类与接口的应用
? abstract class和 interface是 Java语言中对于抽
象类定义进行支持的两种机制,它赋予了 Java
强大的面向对象能力。
? abstract class和 interface之间在对于抽象类定
义的支持方面具有很大的相似性,甚至可以相
互替换。
2.6.3抽象类与接口的应用
? 抽象类与接口的区别如下,
– 抽象类可以有自己的实现方法,但接口不行。
– 在同一层的继承中,接口可以继承多个其他接口,
但抽象类只能继承一个
– 可以同时继承多个接口但只能继承一个抽象类
2.6.3抽象类与接口的应用
? 1.理解抽象类
– 抽象类是用来表征在对问题领域进行分析、设计中得出的抽
象概念,是对一系列看上去不同,但是本质上相同的具体概
念的抽象。
– 比如:如果进行一个图形编辑软件的开发,就会发现问题领
域存在着圆、三角形这样一些具体概念,它们是不同的,但
是它们又都属于形状这样一个概念,形状这个概念在问题领
域是不存在的,它就是一个抽象概念。正是因为抽象的概念
在问题领域没有对应的具体概念,所以用以表征抽象概念的
抽象类是不能够实例化的。
2.6.3抽象类与接口的应用
? 1.理解抽象类
– 在面向对象领域,抽象类主要用来进行类型隐藏。
可以构造出一个固定的一组行为的抽象描述,但是
这组行为却能够有任意个可能的具体实现方式。这
个抽象描述就是抽象类,而这一组任意个可能的具
体实现则表现为所有可能的派生类。从语法定义层
面看 abstract class和 interface,Java语言对于
abstract class和 interface给出了不同的定义方式 。
2.6.4 Final修饰符号的作用
? final 关键字可以修饰类、类的成员变量和成员方法,
但 final 的作用不同。
? 1) final 修饰成员变量,
– final修饰变量,则成为常量
– 例如
– final type variableName;
– 修饰成员变量时,定义时同时给出初始值,而修饰局部变量
时不做要求。
2.6.4 Final修饰符号的作用
? 2) final 修饰成员方法
– final修饰方法,则该方法不能被子类重写
– 例如
? final returnType methodName(paramList){}
? 3) final 类
final修饰类,则类不能被继承
– 例如
? final class finalClassName{}
小结
? 通过本节学习,使我们主要学习了如下主要内
容,
– 抽象方法的定义
– 接口的定义
– 接口的实现