1

参考C#,可以定义不包含抽象方法的抽象类,那么将类定义为抽象有什么用呢?

4

9 回答 9

2

具有属性的abstract类可用于表示继承中的基类。抽象类不能被实例化。这可能很合适,因为我们不想让其他人为我们的基类创建对象。

您可以定义抽象类来定义对象的抽象性质。例如:动物有眼睛。Dog 可以从 Animal 继承,因此它会有眼睛。我们可以创建一个 Dog 对象。但是我们不想创建 Animal 对象。

来自msdn ,

抽象类的目的是提供多个派生类可以共享的基类的通用定义。例如,一个类库可以定义一个抽象类,用作其许多函数的参数,并要求使用该库的程序员通过创建派生类来提供他们自己的类实现。

于 2012-05-31T18:46:16.410 回答
1

参考 C#,可以定义不包含抽象方法的抽象类

是的,一点没错

那么将类定义为抽象有什么用?

主要是为了传达应该派生类的事实。通过使构造函数受保护可以实现类似的效果:没有人将能够创建类的实例而不继承它。

于 2012-05-31T18:46:36.243 回答
1

将类定义为抽象可防止它被直接实例化。

于 2012-05-31T18:47:28.750 回答
1

基本上,我使用的经验法则是,当必须继承才能实例化类时,您应该始终定义抽象类。因为抽象类本身不能。

例如。假设您有一个 Building 类,它是抽象的。然后必须通过派生类实例化它,例如银行或房屋。Building 类中没有抽象方法的事实与它是否抽象无关。

于 2012-05-31T18:50:23.593 回答
1

一个简单的规则是,当你觉得这个特定的类如果单独存在没有意义时,就创建抽象类(无论它包含或不包含抽象方法) ......

因此使用抽象类时

  • 你不允许抽象类的对象的实例化,因为它对于那个目的来说太笼统了
  • 但同时允许你给出一些可以被其他类继承的方法的具体实现,这对你设计的层次结构很有帮助
于 2012-06-02T16:38:28.777 回答
0

您可以将一个类定义为抽象类并且其中没有方法......但是,您将无法对它做任何事情,因为它只能由其他类继承而不能自行实例化。

于 2012-05-31T18:47:49.487 回答
0
  1. 您不能创建抽象类的实例。
  2. abstract 关键字使您能够创建不完整且必须在派生类中实现的类和类成员。
  3. 抽象类的目的是提供多个派生类可以共享的基类的通用定义。
于 2012-05-31T18:49:44.733 回答
0

抽象类可以包含抽象方法以及普通(具体方法)。

抽象类的目的是用作可以被其他类继承的基类。这样做的好处是多个子类可以利用基类(抽象类)中的方法,而不必再次重写相同的方法。

于 2012-05-31T18:49:49.543 回答
0

您定义一个类abstract保留定义抽象成员的可能性。

确实可以避免这样做,但在这种情况下,它的意义就更少了。

可以做其他类似的问题:

为什么我可以定义一些函数virtual,即使没有人会覆盖它。?

当然,这些是不同的概念,但提出问题的想法是相同的。

希望这可以帮助。

于 2012-05-31T18:52:46.210 回答