社区
C#
帖子详情
抽象类不能实例化的根本原因是什么?不应该是有抽象方法就不能实例化了
shou_ji_dang
2011-10-18 08:45:25
抽象类不能实例化是因为抽象类里有没有实现的方法,这个理由很牵强。抽象类不是必须有抽象方法,抽象方法则必须放在抽象类里。反编译发现抽象类默认无参构造函数是保护的,但设置成公有的还是无法实例化(抽象类里没有抽象方法),而且不能有抽象构造函数或抽象静态方法。为什么要这样设置?不能实例化还要默认保护的无参构造函数干什么?
...全文
1581
11
打赏
收藏
抽象类不能实例化的根本原因是什么?不应该是有抽象方法就不能实例化了
抽象类不能实例化是因为抽象类里有没有实现的方法,这个理由很牵强。抽象类不是必须有抽象方法,抽象方法则必须放在抽象类里。反编译发现抽象类默认无参构造函数是保护的,但设置成公有的还是无法实例化(抽象类里没有抽象方法),而且不能有抽象构造函数或抽象静态方法。为什么要这样设置?不能实例化还要默认保护的无参构造函数干什么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
showjim
2011-10-18
打赏
举报
回复
抽象说明是缺少细节的,是不完整的。
默认保护的无参构造函数,应该是给编译器调用的,为了在实现层面上与其它类没有差异,简化了设计。
静态继承,确实是个问题,比如我个人的应用经常会碰到这个问题。我认为是.net开发组在这个问题上偷懒造成的,可能他们认为你把静态改成动态不就行了,只是感觉不优雅。
IE11下面经常卡到爆
2011-10-18
打赏
举报
回复
从面向对象设计来讲,抽象类是从一堆有某种共性的具体子类中抽象出来的,它代表的是这一类事物,而非具体的某一个
就像人和LZ的关系一样
shou_ji_dang
2011-10-18
打赏
举报
回复
[Quote=引用 6 楼 findcaiyzh 的回复:]
实例化后调用了abstract函数怎么办。它没有实现。
[/Quote]
即使没有写抽象函数还是被阉割掉了可能存在的这种风险,C#把危险降到很低很低
idaydayup
2011-10-18
打赏
举报
回复
[Quote=引用 5 楼 shou_ji_dang 的回复:]
引用 4 楼 gengchenhui 的回复:
我觉得是这样,举个例子:张三是个人,人是动物,这里面张三是对象,人是类,动物就是个抽象类,你怎么去实例化一个动物?让他长成什么样?
我是这样理解面向对象的,跟现实生活联系起来。
很有道理,这种东西不能用语法考虑。三大特征必须联系生活才行。就好比静态成员可以当成一个家庭的财产,会一辈辈传下去,除非晚辈们重新有了新财产(隐藏了老辈们的财产)。……
[/Quote]
好乱 呵呵,确实要结合实际来思考 很多东西跟现实结合起来思考就会发现是对的.否则就想不通
宝_爸
2011-10-18
打赏
举报
回复
实例化后调用了abstract函数怎么办。它没有实现。
shou_ji_dang
2011-10-18
打赏
举报
回复
[Quote=引用 4 楼 gengchenhui 的回复:]
我觉得是这样,举个例子:张三是个人,人是动物,这里面张三是对象,人是类,动物就是个抽象类,你怎么去实例化一个动物?让他长成什么样?
我是这样理解面向对象的,跟现实生活联系起来。
[/Quote]
很有道理,这种东西不能用语法考虑。三大特征必须联系生活才行。就好比静态成员可以当成一个家庭的财产,会一辈辈传下去,除非晚辈们重新有了新财产(隐藏了老辈们的财产)。而非静态的就好比家庭成员的财产,只有家庭有这个成员才会有这份财产。不知道这么理解对不对?
gengchenhui
2011-10-18
打赏
举报
回复
我觉得是这样,举个例子:张三是个人,人是动物,这里面张三是对象,人是类,动物就是个抽象类,你怎么去实例化一个动物?让他长成什么样?
我是这样理解面向对象的,跟现实生活联系起来。
shou_ji_dang
2011-10-18
打赏
举报
回复
[Quote=引用 2 楼 wanghui0380 的回复:]
晕,还真能追,可惜追错方向了
思想决定手段,而非手段决定思想
抽象类不能实例化,是因为微软想把做成这样。
而不是莫个程序员对构造函数写了保护,于是微软说这样挺好,以后就这样办了
[/Quote]
这个我也想过,我觉得C#把许多可能出错的功能阉割掉了,静态类不能继承静态类我觉得有时是可以的,但C#为了防止有实例类继承静态类,直接让静态类不能派生也不能继承了,让静态类完全独立出来,只继承于Object。我只是怕自己理解错了,想看看大神们的想法是否相同。
wanghui0380
2011-10-18
打赏
举报
回复
晕,还真能追,可惜追错方向了
思想决定手段,而非手段决定思想
抽象类不能实例化,是因为微软想把做成这样。
而不是莫个程序员对构造函数写了保护,于是微软说这样挺好,以后就这样办了
bdmh
2011-10-18
打赏
举报
回复
理解为规定即可,当你主宰编译器后,你可以决定是否让实例化
shou_ji_dang
2011-10-18
打赏
举报
回复
[Quote=引用 10 楼 sbwwkmyd 的回复:]
抽象说明是缺少细节的,是不完整的。
默认保护的无参构造函数,应该是给编译器调用的,为了在实现层面上与其它类没有差异,简化了设计。
静态继承,确实是个问题,比如我个人的应用经常会碰到这个问题。我认为是.net开发组在这个问题上偷懒造成的,可能他们认为你把静态改成动态不就行了,只是感觉不优雅。
[/Quote]
确实是这个问题,他们只是想减少麻烦,把整个静态类全部孤立起来,避免了讨论静态类继承实例类或者实例类继承静态类的麻烦,o(︶︿︶)o 唉,阉掉了
不能
实例化
抽象类
&
抽象类
不能
实例化
在c++和java中我们会定义很多类,但是我们会遇到在对类进行new
实例化
时会遇到“
不能
实例化
抽象类
”或者“
抽象类
不能
实例化
”,针对这个问题要首先理解两个内容“
抽象类
”和“
实例化
” 如果只是想单纯的理解,那么意思就是你画了一个有四条边的图形你说是矩形 但是这是不可以的,为什么?因为矩形还有一个条件就是要四个内角是直角 其中画有四条边的图形就是
抽象类
,矩形就是
实例化
如果理解了含义但是不懂代码中的定义,那么那么就百度百度定义!定义真的很重要!
抽象类
定义: 含有纯虚函数的类称为
抽象类
抽象类
不能
实例化
,那么
抽象类
中的构造方法有什么意义?
在Java中,
抽象类
的构造方法主要用于初始化
抽象类
中定义的成员变量和执行一些必要的操作。虽然
抽象类
不能
被
实例化
,但是它的子类可以通过调用父类的构造方法来完成对父类成员变量的初始化。总之,
抽象类
中的构造方法虽然
不能
直接
实例化
,但是仍然具有重要的作用,可以为其子类提供必要的初始化和逻辑处理。此外,
抽象类
的构造方法也可以用于进行安全检查和参数验证等逻辑,以保证子类
实例化
时的正确性。
抽象类
为什么
不能
被
实例化
?
抽象类
不能
被
实例化
的主要原因是
抽象类
本身存在
抽象方法
,而
抽象方法
没有具体的实现代码。因此,
实例化
一个
抽象类
没有意义,因为你无法为
抽象方法
提供具体的实现。当你创建一个
抽象类
时,你可以在其中定义一些
抽象方法
,然后让具体的子类来继承这个
抽象类
并实现这些
抽象方法
。子类必须提供这些方法的具体实现才能创建对象。
抽象类
的主要作用是为其子类提供一个通用的模板和一组共享的方法签名,以便子类必须提供这些方法的具体实现。的对象可以被
实例化
,因为它提供了
抽象方法
的实现。是一个具体的子类,它继承了。
Java
抽象类
为什么
不能
被
实例化
问题背景 在理解
抽象类
为什么
不能
被
实例化
之前,首先我们要了解以下几个问题。 问题一:什么是
抽象类
?
抽象类
是Java中一种特殊的类,该类使用了abstract关键字进行修饰,该类允许有普通方法和
抽象方法
,该类
不能
够进行
实例化
(这个在后面进行解释)因为
抽象类
不能
直接
实例化
,所以必须需要有实现子类。 问题二:为什么要有
抽象类
?
抽象类
是介于接口与普通类之间的一种结构,接口中定义的都是
抽象方法
,而类中都是普通方法。当我们存在一类事物,他们大多数结构和功能存在雷同,只有少部分存在不同,如果我们直接使用子类实现接口
抽象类
为什么
不能
被
实例化
?
今天无意中看到一个问题:为什么
抽象类
不能
实例化
? 很多人的答案都是再说使用
抽象类
的好处,但是并没有回答为什么
不能
实例化
?这个过程就像是在回答:为什么公鸡
不能
下蛋?然后回答是使用公鸡可以打鸣。 按照我的理解,如果不对,欢迎补充。 答案是规定。 为什么我这么理解,原因有以下几点。 第一点:回归问题最初,我们为什么要
实例化
? 我们先逆向思维来考虑,从面向对象的思想来看: 我们需要完成实现一个功能,而...
C#
111,098
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章