Java 抽象类能不能实例化

短回答就是:不能

 

这里有 2 个概念,什么是抽象类和什么是实例化。

 

实例化

实例化简单来说就是为 Java 中使用的对象分配存储空间。

抽象类

从代码上来说,抽象类就是一个用 abstract 关键字来修饰的类。

这个类除了不能被实例化以外,其他都能做。

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

// Java program to demonstrate abstract class
// cannot have instance

public abstract class ClassOne {

	public void printSomething()
	{
		System.out.println("Hello in abstract class");
	}
}
class CreateClassOne {

	public static void main(String[] args)
	{
		// instance of abstract
		// class "ClassOne"
		ClassOne obj = new ClassOne();
	}
}

上面的代码运行时候将会出现错误:

prog.java:17: error: ClassOne is abstract; cannot be instantiated
        ClassOne obj = new ClassOne();
                       ^
1 error

因为你尝试实例化这个抽象类。

为什么不能实例化抽象类

很多人在这里都有点懵,为什么我就不能实例化抽象类。

正如我们上面说的,实例化就是为类分配需要的内容空间,以便于类去进行计算。

因为抽象类没有足够的信息, JVM 没有办法知道抽象类到底给他们分配什么。比如说没有具体的成员变量和成员方法。

你说,我们可以这样呀:

 HashMap hashMap = new HashMap();
 AbstractMap abstractMap = new TreeMap();

这样是对 abstractMap 进行实例化吗?这显然不是。

这是你用抽象类的名字定义了一个 Map,但是这个 Map 是用 TreeMap 实例化的。

最后你内存里面得到的是一个 TreeMap 而不是 abstractMap。

 

 
posted @ 2023-09-10 08:35  huyuchengus  阅读(53)  评论(0编辑  收藏  举报