Java程序设计基础
抽象类和接口
抽象类和接口主要内容
?9.1抽象类(重点)
?9.2接口(重点)
?9.3内部类
1
教学目标
?能理解抽象类的概念及作用
?能理解接口的概念及作用
?能准确区分接口继承与类继承的不同之处
?能准确区分接口和抽象类的不同及联系
?能使用接口和抽象类实现面向基类的编程思想
?能理解内部类的概念及作用
?能正确使用成员内部类,静态内部类,局部内部类、匿名内部类等四种类型的内部类
?能使用接口和抽象类提高程序的复用度
2
抽象类简介
?除了前面介绍的类以外,还存在一种特殊的类——抽象类。如果在类的定义中存在着一
些抽象的方法,那么这种类就称为抽象类。语法上,抽象类是不能用于实例化对象的。
?抽象类往往用来表示抽象概念。
?举个例子,中国人(Chinese类)和美国人(American类)都有“吃饭”这个行为,因
此可以先定义一个Person类,然后让Chinese和American都继承这个类。但如何在
父类Person中定义“吃饭”这个方法呢?一般而言,中国人是用筷子吃饭,并且吃的是
中餐;而美国人是用刀叉吃饭,吃的是西餐,显然二者对于“吃饭”这一行为的具体实现
是不同的。因此,无法在父类Person中具体的定义“吃饭”这一方法。此时,就可以将
Person定义成一个抽象类,并将“吃饭”这个行为定义成抽象方法(只有方法声明,但
没有方法体的方法),然后再在子类Chinese和American中分别对“吃饭”进行具体的
实现。
3
抽象类的语法形式
?在面向对象分析和设计的过程中,经过封装和继承的分析之后,可以先创建一个抽象的
父类,该父类定义了其所有子类共享的一般形式(如Person类),具体细节再由子类
来完成(如Chinese类和American类)。Java中定义抽象类的语法形式如下。
abstractclass类名{}
?Java也提供了一种特殊的方法,这个方法不是一个完整的方法,只含有方法的声明,
没有方法体,这样的方法叫做抽象方法,其语法形式如下。
访问修饰符abstract返回值方法名();
4
抽象类的三个语法特征
?抽象类不能被直接实例化
?抽象类的子类必须实现抽象方法(除非这个子类也是抽象类)
?抽象类里可以有普通方法,也可以有抽象方法,但是有抽象方法的类必须是抽象类。
需要注意的是,抽象类里面也可以没有抽象方法,只是把原来的类前面加上abstract关
键字,使其变为抽象类。例如,以下定义抽象类的代码是符合语法规范的。
5
接口简介
?接口是一系列抽象方法的集合,与抽象类不同,不可以声明普通方法。
?虽然有人常说,接口是一种特殊的抽象类,但是在面向对象编程的设计思想层面,两者
还是有显著区别的。抽象类更侧重于对相似的类进行抽象,形成抽象的父类以供子类继
承使用;而接口往往在程序设计的时候,定义模块与模块之间应满足的规约或者定义一
种标准,使各模块之间能协调工作。
6
接口的定义语法
?Java接口定义的语法形式如下。
[修饰符]interface接口名[extends][接口列表]{接口体}
?interface前的修饰符是可选的,如果使用修饰符,则只能用public修饰符,表示此接
口是公有的,在任何地方都可以引用它,这一点和类是相同