社区
Java SE
帖子详情
深入Java中的抽象类为何不能实例化?
wmyong863
2010-04-27 01:50:23
讨论一下:Java中的抽象类到底为何不能实例化?
...全文
5447
56
打赏
收藏
深入Java中的抽象类为何不能实例化?
讨论一下:Java中的抽象类到底为何不能实例化?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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)
java
抽象类
为什么
不能
被
实例化
?
转载:
java
抽象类
为什么
不能
被
实例化
? 我把CSDN论坛里面的一个帖子内容list到下面,自己看着理解,东家一言,西家一语,杂合起来,基本上也就理解了
java
中
的
抽象类
为什么
不能
被
实例化
了。 因篇幅有限,只能罗列部分留言 以下内容不分先后顺序 =====================================
抽象类
只在分配了在栈
中
的引用,没有分配堆
中
的内存。程序都有一个代码段,再内存...
Java
抽象类
为什么
不能
被
实例化
问题背景 在理解
抽象类
为什么
不能
被
实例化
之前,首先我们要了解以下几个问题。 问题一:什么是
抽象类
?
抽象类
是
Java
中
一种特殊的类,该类使用了abstract关键字进行修饰,该类允许有普通方法和抽象方法,该类
不能
够进行
实例化
(这个在后面进行解释)因为
抽象类
不能
直接
实例化
,所以必须需要有实现子类。 问题二:为什么要有
抽象类
?
抽象类
是介于接口与普通类之间的一种结构,接口
中
定义的都是抽象方法,而类
中
都是普通方法。当我们存在一类事物,他们大多数结构和功能存在雷同,只有少部分存在不同,如果我们直接使用子类实现接口
【
Java
】
抽象类
为什么
不能
被
实例化
?
1. 前言
抽象类
基础:请查看博客:抽象方法和
抽象类
详解 2.
抽象类
为什么
不能
被
实例化
? 答案:
Java
语言的规定! 首先,
抽象类
是存在构造器的,在思考这个问题之前,我大概有一种这样的思维:既然有构造器,说明这个类可以被
实例化
(错误)。知道遇到这个问题后,我才意识到我的这个想法是有多少错误。
实例化
和有没有构造方法没有关系,构造方法只是初始化对象的,new关键字向JVM申请内存来创建对象的。 举个例子:苹果是水果的一个实例。但是不存在水果这样的实例! 1.第一点:回归问题最初, 我们为什么要
实例化
? 我们
不能
实例化
抽象类
_
Java
抽象类
Java
抽象类
点击蓝字关注我们
抽象类
的基本概念01在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。而拥有抽象方法的类就是
抽象类
,
抽象类
要使用abstract关键字声明。
抽象类
为什么
不能
直接
实例化
02当一个类
实例化
之后,就意味着这个对象可以调用类
中
的属性或者放...
Java
抽象类
能
不能
实例化
这里有 2 个概念,什么是
抽象类
和什么是
实例化
。
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章