Administrator
发布于 2023-04-13 / 21 阅读 / 0 评论 / 0 点赞

抽象类为什么不能实例化

最近朋友说了一个问题,关于抽象类能不能被实例化,然后我就突然解释不清楚为什么不可以,只是很粗浅地说了一句:类里的方法只定义没有声明,于是出现了这篇博客。

  • 什么是抽象类

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

    • 就比如水果,我们买水果的时候,不能直接告诉水果商贩我们就要买水果,因为我们需要告诉我们需要的是苹果还是香蕉这种具体的水果。在这个例子中,水果就相当于抽象类,苹果和香蕉就相当于具体的对象。

  • 所以具体为什么抽象类不能被实例化呢

    • 类里的方法只定义没有声明,形象一点说就是里面的方法只有一个名字,还不知道是用来做什么的怎么做的,所以实例化的时候都不知道要怎么实例化,所以怎么能实例化呢。

    • 抽象类只在分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化。

    • 实际上抽象类更多提供的是一个框架的功能,参数比接口更详细些。

  • 这样设计的理由和原因

    • 考虑到某些类所具备的信息不足以实例化一个对象,才设计成抽象的。

    • 因为这个类不能够被实例化,所以才设计成抽象的。比如水果的范围很广,当你需要对苹果和梨做新的,共同的修改或者添加的时候. 你现在就可以直接对他们的超类水果做就可以了。

    • 程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化。


评论