[Java] 抽象类为什么不能实例化

大家知道,抽象类和接口都是不能实例化的,但是为什么呢?看看以下解释:

1.哲学上:

面向对象思想是对现实社会的模拟(抽象),从哲学上讲进化不完全的物种是不能生存的! 所以对于一个抽象性的东西,它是不完整的,也就没法实例,就好比买水果,显然是买不到一种叫“水果”的东西的。

2.内存中:

抽象类只在内存中分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段, 在内存中需要占据一定的内存,而抽象类有抽象方法,没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全, JAVA不允许抽象类,接口直接实例化。

[Java] Java中的标记接口(Tag or marker interfaces)

1. 什么是标记接口?

一个空的接口称为标记接口(Tag Interface),Java中很多标记接口,比如Serializable, EventListener, Remote(java.rmi.Remote)等。

package java.util;
public interface EventListener
{}

2. 标记接口有什么特点?

标记接口没有任何成员变量和方法,它就是空的。你肯定疑惑,既然是空的,其他类怎么去实现(implement)它?它用来做什么?

实际上,其他类implement它是为了声明该类在某个特定集合中的成员资格,比如当一个类实现(implement)了Serializable接口,它的目的是声明其是Serializable中的一个成员,当JVM虚拟机看到该类是Serializable的,那么它在处理序列化/反序列化时会做一些特殊的处理。

标记接口对JVM是很有意义,你可以创建自己的标记接口来分离或分类代码,从而提高代码的可阅读行。