less than 1 minute read

abstract 的真正含义是“阻止产生对象” (针对类) 或是 “禁止被对象所拥有” (针对方法,类似 static)。

一个 abstract class 是不能产生 object 的(P.S. 抽象类可以声明引用,不可实例化;类似在使用多态时,我们可以声明一个接口的引用,实际指向一个实现类对象)。

abstract method 只有方法声明,没有方法 body。

拥有 abstract method 的 class 必须声明为 abstract,否则会编译报错 (abstract method 不能被对象所拥有,那么包含该 abstract method 的 class 自然不能产生对象,所以必须是 abstract class)。当然,abstract class 不一定非要有 abstract method,在某些情况下,我们可能只是单纯地想要某个 class 不能产生对象,这时就可以用 abstract class,对这个 abstract class 的内部我们没有任何要求。

P.S. 编译器对 abstract 和后面要提到的 interface 的处理机制都是 Java 为了强调抽象的设计方法而在语言方面做的强制规定。

因为 abstract class 不能产生 object,所以主要用来继承。如果一个 ext class 继承自 abstract class,且该 abstract class 中有 abstract method,那么由继承的知识可知,ext class 也会有这个abstract method,如果 ext class 中不覆写这个 abstract method,那么这个 ext class 也必须声明为 abstract。

abstract class 作为 base class 是支持向上转型的,即原来对一般 base class 的向上转型用法对 abstract base class 同样适用。

Categories:

Updated:

Comments