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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2020-09-10 AWS CLI version 2 在 Windows 下的安装
2020-09-10 AWS CodeArtifact 如何设置用户的 TOKEN
2020-09-10 AWS 命名提示需要指定 region
2020-09-10 AWS CodeArtifact 如何删除 Repository