首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于抽象类?

关于抽象类?
EN

Stack Overflow用户
提问于 2010-05-15 17:04:37
回答 7查看 365关注 0票数 2

网址:链接(1)

根据这篇文章..。您不能实现抽象类,而只能从它们派生。这是有道理的,我已经读了很多次了。

像接口一样,不能实现抽象类的实例,但是可以在抽象类中实现可由子类使用的方法、字段和属性。

但在MSDN上

网址:MSDN上的TextWriter CLass

TextWriter是一个抽象类,但它定义了两个构造函数.根据MS 70-536的书,以下声明是有效的:

代码语言:javascript
复制
TextWriter tw = new File.CreateText("myFile.Txt")

静态文件类和它的CreateText方法对我来说很好,因为我在MSDN上研究过它,但是有人能解释一下我发现的这个小矛盾吗?我肯定不是第一个?

为什么基类抽象类的实例化是可能的?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-05-15 17:12:51

所有抽象类至少有一个构造函数--要么实现一个,要么编译器生成一个无参数的默认构造函数。构造函数是在实例化派生类时执行的--基类是抽象的并不重要。

但是不能实例化抽象类-- File.CreateText()是一个静态方法,并返回从TextWriter派生的类的实例,而不是TextWriter实例。

票数 3
EN

Stack Overflow用户

发布于 2010-05-15 17:08:17

File.CreateText不返回TextWriter,而是返回StreamWriter,后者是TextWriter。

票数 4
EN

Stack Overflow用户

发布于 2010-05-15 17:12:22

您可以在这里实例化似乎是抽象类的类,其原因与您可以实例化似乎是接口的类的原因相同:您实际上不是创建该类型的类,而是创建一个可以转换为该类型的类。tw可以定义为TextWriter,尽管它实际上不能是TextWriter。

但是,我对这个新关键字表示怀疑。你确定那有效吗?File.CreateText创建并返回一个TextWriter,但是new表示一个构造函数,而构造函数不是正在发生的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2840962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档