抽象类是许多面向对象语言的核心特性,例如Java。也许是因为这个原因,他们往往被过度使用,实际上被误用了。在本文中,我们将使用一些模式和反模式的示例来说明何时使用抽象方法,何时不使用。
虽然本文从Java的角度介绍了该主题,但它也与大多数其他面向对象的语言相关,即使那些没有抽象类概念的语言也是如此。为此,让我们快速定义抽象类。如果您已经知道抽象类是什么,请跳过以下部分。
定义抽象类
从技术上讲,抽象类是一个无法直接实例化的类。相反,它被设计为可以 实例化的具体类的扩展 。抽象类可以 - 通常也可以 - 定义一个或多个抽象方法,这些抽象方法本身不包含主体。相反,需要具体的子类来实现抽象方法。
让我们编写一个简单的例子:
public
abstract
class
Base
{
public
void
doSomething
()
{
System
.
out
.
println
(
"Doing something..."
)
}
public
abstract
void
doSomethingElse
();
}
请注意 doSomething() - 一个非抽象方法 - 实现了一个主体,而 doSomethingElse() - 一个抽象方法 - 没有实现主体。您无法直接实例化Base实例。试下下面的这段代码,你的编译器会报错:
Base
b
=
new
Base
();
事实上,你需要Base的一个子类,如下所示:
public
class
Sub
extends
Base
{
public
abstract
void
doSomethingElse
()
{
System
.
out
.
println
(
"Doin' something else!"
);
}
}
请注意该doSomethingElse() 方法的实现 。
并非所