当前位置: > 财经>正文

Java抽象类为什么不能被实例化? 保险金信托没有坏处吗为什么呢还能贷款呢

2023-08-16 06:05:13 互联网 未知 财经

Java抽象类为什么不能被实例化?

1. 前言

抽象类基础:请查看博客:抽象方法和抽象类详解

2. 抽象类为什么不能被实例化?

答案:Java语言的规定! (https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.1.1)

(1)首先,抽象类是存在构造器的,在思考这个问题之前,我大概有一种这样的思维:既然有构造器,说明这个类可以被实例化(错误)。直到遇到这个问题后,我才意识到我的这个想法是有多么错误。

实例化和有没有构造方法没有关系,构造方法只是初始化对象的,new关键字向JVM申请内存来创建对象的。

(2)但是,有出现了另外一个问题,那抽象类中的构造器有个啥用?

回答:要知道抽象类是用来继承的,为什么用来继承,一般是用来实现多态!那么我们知道,在new一个子类对象的时候,默认调用了super();

结合实际:

1.第一点:回归问题最初, 我们为什么要实例化?

我们先逆向思维来考虑,从面向对象的思想来看:

我们需要完成实现一个功能,而功能中的方法,是由对象来调用的,因此我们需要对象,因此我们需要实例化。

那么回归本问题,什么是抽象类?

抽象:就是不具体的意思。类是对对象的具体描述,而抽象类不具体,没有方法体,(提供的成员不足以生成一个具体对象),那么就无法生成一个不具体的对象。就好比,你可以实例化一个苹果,但你不能实例化一个水果(这个现实中存在的实物)。

2.内存考虑:

对象实例化的时候,关键字new向JVM申请内存,这个类的成员(成员变量,成员方法)会被保存到内存中。而抽象类,没有具体的成员(成员变量,成员方法),没办法准确分配内存。

3.现实逻辑:

按照现实逻辑,抽象是从现实实物的抽离,总结,比如定义一个动物类接口。这个接口是所有动物所共有的特点组成在一起,但是并不能组成现实中真真正正存在的物种。那么为什么要有抽象类?

4.设计层面:

为了实现多态,当某些类只希望作为父类使用,不希望被实例化。也就是我们从上层设计角度,就不希望有些类被实例化。当我们进行设计的时候需要尽量依赖父类,越向上层的类越稳定,不容易被修改。

综上所述:现实逻辑,面向对象,设计,内存都不希望我们实例化抽象类,所以编译器规定不能实例化。

参考

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。