前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 抽象类能不能实例化

Java 抽象类能不能实例化

原创
作者头像
HoneyMoose
发布2023-09-10 08:37:10
1450
发布2023-09-10 08:37:10
举报
文章被收录于专栏:CWIKIUSCWIKIUS

短回答就是:不能

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

实例化

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

抽象类

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

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

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

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

代码语言:javascript
复制
// 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();
	}
}

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

代码语言:javascript
复制
prog.java:17: error: ClassOne is abstract; cannot be instantiated
        ClassOne obj = new ClassOne();
                       ^
1 error

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

为什么不能实例化抽象类

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

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

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

你说,我们可以这样呀:

代码语言:javascript
复制
 HashMap hashMap = new HashMap();
 AbstractMap abstractMap = new TreeMap();

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

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

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

2023-09-09_07-31-37
2023-09-09_07-31-37

https://www.isharkfly.com/t/java/14751

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实例化
  • 抽象类
  • 为什么不能实例化抽象类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档