不能实例化抽象类_抽象类为什么不能被实例化?
今天⽆意中看到⼀个问题:为什么抽象类不能实例化?
很多⼈的答案都是再说使⽤抽象类的好处,但是并没有回答为什么不能实例化?这个过程就像是在回答:为什么公鸡不能下蛋?然后回答是使⽤公鸡可以打鸣。
按照我的理解,如果不对,欢迎补充。
规定。
答案是 规定
为什么我这么理解,原因有以下⼏点。
我们为什么要实例化?
1. 第⼀点:回归问题最初, 我们为什么要实例化?
我们先逆向思维来考虑,从⾯向对象的思想来看:
我们需要完成实现⼀个功能,⽽功能中的⽅法,是由对象来调⽤的,因此我们需要对象,因此我们需要实例化。
那么回归本问题,什么是抽象类?
抽象:就是不具体的意思。类是对对象的具体描述,⽽抽象类不具体,没有⽅法体,(提供的成员不⾜以⽣成⼀个具体对象),那么就⽆法⽣成⼀个不具体的对象。就好⽐,你可以实例化⼀个苹果,但你不能实例化⼀个⽔果(这个现实中存在的实物)。
2.内存考虑:
对象实例化的时候,关键字new向JVM申请内存,这个类的成员(成员变量,成员⽅法)会被保存到内存中。⽽抽象类,没有具体的成员(成员变量,成员⽅法),没办法准确分配内存。
3.现实逻辑:
抽象类的使用按照现实逻辑,抽象是从现实实物的抽离,总结,⽐如定义⼀个动物类接⼝。这个接⼝是所有动物所共有的特点组成在⼀起,但是并不能组成现实中真真正正存在的物种。那么为什么要有抽象类?
4.设计层⾯:
为了实现多态,当某些类只希望作为⽗类使⽤,不希望被实例化。也就是我们从上层设计⾓度,就不希望有些类被实例化。当我们进⾏设计的时候需要尽量依赖⽗类,越向上层的类越稳定,不容易被修改。
编译器规定不能实例化。
综上所述:现实逻辑,⾯向对象,设计,内存都不希望我们实例化抽象类,所以 编译器规定不能实例化。
关于抽象类可以看这篇⽂章
还需要注意的⼀点是实例化和有没有构造⽅法没有关系,构造⽅法只是初始化对象的,new关键字向JVM申请内存来创建对象的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论