深入Java中的抽象类为何不能实例化?

wmyong863 2010-04-27 01:50:23
讨论一下:Java中的抽象类到底为何不能实例化?
...全文
4853 56 点赞 打赏 收藏 举报
写回复
56 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Java18 2012-05-06
但为什么抽象类的构造函数能被调用呢~~
  • 打赏
  • 举报
回复 1
小灰狼 2012-05-06
因为抽象类有没有实现的方法

如果实例化之后,再来调用这个对象的抽象方法,计算机不知道该执行哪些操作。
  • 打赏
  • 举报
回复
Papaver 2012-03-03
本来过来想说,抽象的原则就是定义了一个模板,具体实现需要类继承类来实现。后来发现,大家都已经说明白了。
  • 打赏
  • 举报
回复
Zebulon 2012-03-03
因为抽象方法并没有真正的被实现,所以若抽象类可以被实例化的话,说明该对象可以使用抽象类的所有方法,而此时调用抽象方法会发现抽象方法并没有任何作用,从而产生错误。
我认为抽象类不能被实例化是为了避免这种错误的发生
我也是新手 不对的地方可以讨论讨论
  • 打赏
  • 举报
回复
quanyaji 2012-03-03
抽象类只在分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化
  • 打赏
  • 举报
回复
会思考的草 2012-03-02
我觉得从两方面来考虑。
其一,哲学角度,抽象基类往往在逻辑上无法实体化,比如说让别人去买水果,不说买什么,就说买水果,显然是买不到一种叫“水果”的东西的。
其二,反面考虑,假如从语法上允许实例化一个抽象类。Java不熟悉,以C++来说吧,那么实现编译器的时候就要面临如何处理virtual void foo()=0;这样的函数符号,这种符号没有函数体,不能为之在代码段分配任何的空间,没有地址,仅仅是个符号,必须要修改编译器才能处理这种特殊的空符号。而且需要扫描所有的代码,禁止调用foo()这个函数,允许实例化一个对象,却不准调用这个对象的某个方法(总不能强制要求所有的纯虚函数必须是private的吧!),这就像一个语法中的黑洞,于情于理都说不过去。
  • 打赏
  • 举报
回复
wuice15 2012-02-26
主要是两点,一个是抽象类是一个不完整的类,一个是内存分配问题。
实际上抽象类更多提供的是一个框架的功能,参数比接口更详细些。
你可以通过声明抽象类,实例化继承它的一个子类,这样程序的耦合性更高,方法调用上也更灵活
  • 打赏
  • 举报
回复
bawgiitx 2012-02-23
抽象类,就像是向别人声明:我能赚大钱
实例化就是具体的行动
因为抽象类只是个声明,而没有计划,也不知道怎么赚钱
所以我们是不会投资给钱(内存)他的,就算投资他他也不能做任何事
为了保存大家的利益,没有具休的赚钱计划不能让他执行
  • 打赏
  • 举报
回复
焙焙龙 2012-02-23
本末倒置了
抽不抽象是设计时该考虑的问题,不能问为什么抽象类不能实例化
因为在设计时,考虑到某些类所具备的信息不足以实例化一个对象,才设计成抽象的
所以问题反过来就是答案:
因为这个类不能够被实例化,所以才设计成抽象的,至于为什么这么做,问你的设计师吧,他也许会给出你答案
不过设计师的脾气都不太好,给你一棒子叫你照着做就行了也是有可能的
  • 打赏
  • 举报
回复
码无边 2012-02-23
抽象类:完全是一种假设的东西,怎么可能生成对象呢?
  • 打赏
  • 举报
回复
zwp441288971 2012-02-23
抽象方法在抽象类中也没有方法体,没必要实例化,抽象类是要子类中体现多态性,让子类去做这事就好了
  • 打赏
  • 举报
回复
李李木子 2012-02-23
顶个!!!!
  • 打赏
  • 举报
回复
huang_zuguang 2012-02-23
抽象类根本就没有发育成熟 你认为它可以生孩子吗?你认为3岁的小女孩可以生孩子吗?
  • 打赏
  • 举报
回复
zoeg 2012-02-22
抽象这个词已经很好的说明这一点了,我的理解是:对事物进行抽象通常是基于一定的经验,从众多的经验中总结出规律,浓缩的结果可以在以后多次获利,但是经验并不能真正帮你工作,你还是需要融入实践应用!
  • 打赏
  • 举报
回复
来接分
  • 打赏
  • 举报
回复
a18210040489 2012-02-22
因为,它是抽象的,虚拟的,不存在的,我们凭空想象出来的,假设的....
  • 打赏
  • 举报
回复
szrjylyl 2012-02-22
做项目的时候用接口的时候多,抽象类了解一下。
  • 打赏
  • 举报
回复
Cactus_hxk 2012-02-22
[Quote=引用 2 楼 run_storm 的回复:]

不仅JAVA,其他任何语言都一样~这是由语言的设计决定了的,就是纯粹为了继承而存在。
[/Quote]
+++
  • 打赏
  • 举报
回复
龙四 2012-02-22
假如可以实例化,调用了abstract方法该如何处理
  • 打赏
  • 举报
回复
网络咖啡 2012-02-22
语法规定,但是抽象类可以使用子类的构造方法实例化
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2010-04-27 01:50
社区公告
暂无公告