为什么不能创建抽象类的对象?

Gau*_*raa 19 language-agnostic oop

这是我脑海中的一个场景,我用谷歌搜索,很多但是得到了答案

"Abstract类没有实现方法,所以我们不能创建对象""'Abstract'这个词指示编译器不要创建类的对象"

但是在一个简单的类中我们有所有的虚方法,能够创建一个对象???

此外,我们可以定义修改为Abstract类构造函数的不同访问,如private,protected或public.

我的搜索终止了这个问题:

为什么我们不能创建Abstract类的对象?

Mar*_*ell 60

抽象类型主要定义为无法创建的抽象类型.您可以创建它的子类型,但不能创建该类型的子类型.CLI不允许您这样做.

abstract类有一个protected构造函数(默认)允许派生类型进行初始化.

例如,base-type Stream是抽象的.没有派生类型,数据会在哪里?调用方法时会发生什么abstract?调用方法没有实际的实现方式.

  • @Gaurav - 简而言之,因为*就是如何定义*.在"抽象"方法的情况下,这是为了提供理智,但即使没有它也没有意义.如果你想能够创建实例 - **不要标记它`abstract`** (5认同)
  • 那是真正的交易,抽象方法:D (2认同)
  • @Mac感谢你解释这些话但是问题仍然存在:为什么我们不能创造一个类的对象?另外,Abstract类的构造函数的默认修饰符是Protected,但我们可以定义一个公共构造函数,然后使用公共构造函数. (2认同)

fro*_*die 21

因为它是抽象的,一个对象是具体的.抽象类有点像模板,或者是空/部分空结构,您必须先扩展它并在它之前构建它.

以"动物"抽象类为例.没有"纯粹的"动物 - 有特定类型的动物.所以你可以实例化Dog and Cat和Turtle,但你不应该能够实例化普通动物 - 这只是一个基本的模板.并且所有动物都有一些共同的功能,例如" makeSound()",但是不能在动物基础上定义.所以如果你可以创建一个Animal对象,你会打电话makeSound(),给对象如何知道要发出的声音?