我把CSDN论坛里面的一个帖子内容list到下面,自己看着理解,东家一言,西家一语,杂合起来,基本上也就理解了java中的抽象类为什么不能被实例化了。
因篇幅有限,只能罗列部分留言
以下内容不分先后顺序
=====================================
抽象类只在分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化
=====================================
哲学角度,抽象基类往往在逻辑上无法实体化,比如说让别人去买水果,不说买什么,就说买水果,显然是买不到一种叫“水果”的东西的。
=====================================
主要是两点,一个是抽象类是一个不完整的类,一个是内存分配问题。
实际上抽象类更多提供的是一个框架的功能,参数比接口更详细些。
=====================================
本末倒置了
抽不抽象是设计时该考虑的问题,不能问为什么抽象类不能实例化
因为在设计时,考虑到某些类所具备的信息不足以实例化一个对象,才设计成抽象的
所以问题反过来就是答案:
因为这个类不能够被实例化,所以才设计成抽象的,至于为什么这么做,问你的设计师吧,他也许会给出你答案
不过设计师的脾气都不太好,给你一棒子叫你照着做就行了也是有可能的
=====================================
抽象类,就像是向别人声明:我能赚大钱
实例化就是具体的行动
因为抽象类只是个声明,而没有计划,也不知道怎么赚钱
所以我们是不会投资给钱(内存)他的,就算投资他他也不能做任何事
为了保存大家的利益,没有具休的赚钱计划不能让他执行
=====================================
不仅JAVA,其他任何语言都一样~这是由语言的设计决定了的,就是纯粹为了继承而存在
=====================================
抽象这个词已经很好的说明这一点了,我的理解是:对事物进行抽象通常是基于一定的经验,从众多的经验中总结出规律,浓缩的结果可以在以后多次获利,但是经验并不能真正帮你工作,你还是需要融入实践应用!
=====================================
学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化
=====================================
面向对象思想是对现实社会的模拟(抽象),从哲学上讲进化不完全的物种是不能生存的!
=====================================
这是从设计思想层面的东西,为什么要纠结这个问题呢?
说白一点,这就是java的使用规范.
=====================================
如果你是一个老板,你问一个应聘的人员:你会什么?他给你一个“我不知道”的答案,你会怎么做!!
这个例子视乎能更现实的说明你的这个问题。面向对象语言是从现实中抽象出来的,它该符合正常的逻辑秩序。
=====================================
Java中是允许不含抽象方法的抽象类的,我认为应该是出于安全的考虑,编译器强制规定不允许抽象类产生对象!
=====================================
java里这么规定的,原因我个人认为是抽象类里有未实现的抽象方法,实例化时不能正常分配内存吧,而且调用这个方法时不是要出异常吗
参考
https://bbs.csdn.net/topics/330265812