社区
Java SE
帖子详情
深入Java中的抽象类为何不能实例化?
wmyong863
2010-04-27 01:50:23
讨论一下:Java中的抽象类到底为何不能实例化?
...全文
5209
56
打赏
收藏
深入Java中的抽象类为何不能实例化?
讨论一下:Java中的抽象类到底为何不能实例化?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
56 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Java18
2012-05-06
打赏
举报
回复
1
但为什么抽象类的构造函数能被调用呢~~
小灰狼
2012-05-06
打赏
举报
回复
因为抽象类有没有实现的方法
如果实例化之后,再来调用这个对象的抽象方法,计算机不知道该执行哪些操作。
Papaver
2012-03-03
打赏
举报
回复
本来过来想说,抽象的原则就是定义了一个模板,具体实现需要类继承类来实现。后来发现,大家都已经说明白了。
Zebulon
2012-03-03
打赏
举报
回复
1
因为抽象方法并没有真正的被实现,所以若抽象类可以被实例化的话,说明该对象可以使用抽象类的所有方法,而此时调用抽象方法会发现抽象方法并没有任何作用,从而产生错误。
我认为抽象类不能被实例化是为了避免这种错误的发生
我也是新手 不对的地方可以讨论讨论
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
打赏
举报
回复
抽象这个词已经很好的说明这一点了,我的理解是:对事物进行抽象通常是基于一定的经验,从众多的经验中总结出规律,浓缩的结果可以在以后多次获利,但是经验并不能真正帮你工作,你还是需要融入实践应用!
努力做个好程序员
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
打赏
举报
回复
语法规定,但是抽象类可以使用子类的构造方法实例化
加载更多回复(33)
面向对象编程的小项目,希望读者少走弯路
6.
抽象类
:
抽象类
是
不能
实例化
的类,通常用来作为其他类的基类,它可能包含抽象方法(没有实现的方法)。子类必须实现
抽象类
的所有抽象方法才能被
实例化
。 7. 泛型:泛型是
Java
SE 5.0引入的新特性,它允许在类、...
Java
语言程序设计-基础篇(原书第8版).pdf
- **类与对象**:解释类和对象的基本概念,以及如何创建类、
实例化
对象。 - **继承与多态**:
深入
探讨继承机制、多态性的实现方式及其在实际编程
中
的应用。 - **封装与抽象**:介绍封装的含义、
抽象类
与接口的区别及...
Java
常考面试题 下载
- **多继承**:
Java
中
的类不支持多继承,即一个类
不能
直接继承多个父类。然而,类可以实现多个接口,这提供了类似多继承的功能。 - **接口与
抽象类
**: 接口与
抽象类
都可以作为定义行为规范的基础,但它们之间存在...
java
游戏之坦克大战
在坦克大战
中
,每个游戏元素(如坦克、子弹、障碍物)都可以抽象为一个类,通过对象来
实例化
并进行交互。此外,
Java
的异常处理机制、集合框架以及IO流等也是游戏开发
中
的关键部分。 二、图形用户界面(GUI) 坦克...
Java
核心技术 卷II 高级特性 第9版(英文)
- **多态**:讲解多态性的概念及其在
Java
中
的实现方式,包括接口的使用、
抽象类
等。 ##### 2. **并发编程** - **线程安全**:讨论如何确保多个线程访问共享资源时不会产生竞争条件。 - **并发工具类**:介绍...
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章