Java中的“抽象”的概念:
在继承的关系中,往往存在这样一类现象,父类所提供的一些方法只是用来提供给子类进行重写的,这种方法往往是“哑”的,它们本来可以不用在基类中定义逻辑,他们的目的就是为基类的所有导出类创建一个通用的“接口”。
建立这种“接口”的唯一理由就是不同的子类可以用不同的方式表示此接口,定义一种基本的形式,表示导出类的公共部分。
抽象方法与抽象类:
我们称这样的方法为“抽象方法”,抽象方法是不完整的方法,在基类中,抽象方法只有声明、没有方法体。我们使用abstract关键字定义,例如:
abstract void f();
含有抽象方法的类我们称之为抽象类,抽象类的定义也必须使用abstract关键字!如果一个类含有一个或者多个抽象方法,那么它必须定义为抽象的,否则编译出错。抽象类的定义:
abstract class T {}
抽象类是用来继承的,抽象方法必须被重写!当然,除非你的子类也是抽象的。抽象类是不完整的(即使你的抽象类中并不还有抽象方法),因此,实例化一个抽象类是不安全的,我们不可以尝试去new一个抽象类对象!
创建抽象类和抽象方法是非常有用的,因为他们可以使类的抽象性明确起来,暗示用户应该如何使用它们,抽象类是一种很有用的重构工具,因为这使得我们可以很容易的将公共方法沿着继承层次结构向上移动。