抽象类(abstract class)
抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象。
比如:我们要描述“水果”,它就是一个抽象,它有质量、体积等一些共性(水果有质量),但又缺乏特性(苹果、橘子都是水果,它们有自己的特性),我们拿不出唯一一种能代表水果的东西(因为苹果、橘子都不能代表水果),可用抽象类来描述它,所以抽象类是不能够实例化的。当我们用某个类来具体描述“苹果”时,这个类就可以继承描述“水果”的抽象类,我们都知道“苹果”是一种“水果”。
在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为这个抽象类的所有派生类。
抽象类仅实现了部分的类。在抽象类中,可以有抽象方法,也可以有具体实现体的方法,没有实现体的方法为抽象方法,要标记为abstract。
在java中,如下方法不能定义为抽象方法:
构造方法
静态方法
私有方法
如果抽象类的子类没有实现全部的抽象方法,那么子类本身自己也是一个抽象类.
抽象类使用需要注意的地方:
1. 抽象类中至少有一个抽象方法
2. 子类实现父类的抽象方法,必须申明访问权限,而且不能比父类里的权限低。
3. 父类中的抽象方法不能定义为private.
接口(interface)
interface从表面上看,和抽象类很相似,但用法完全不同。它的基本功能就是把一些毫不相关的类(概念)集合在一起形成一个新的、可集中操作的“新类”。我给学生的一个典型例子就是“司机”。谁可以当司机?谁都可以,只要领取了驾照。所以我不管你是学生,白领、蓝领还是老板,只要有驾照就是司机。