参考C#,可以定义不包含抽象方法的抽象类,那么将类定义为抽象有什么用呢?
9 回答
具有属性的abstract
类可用于表示继承中的基类。抽象类不能被实例化。这可能很合适,因为我们不想让其他人为我们的基类创建对象。
您可以定义抽象类来定义对象的抽象性质。例如:动物有眼睛。Dog 可以从 Animal 继承,因此它会有眼睛。我们可以创建一个 Dog 对象。但是我们不想创建 Animal 对象。
来自msdn ,
抽象类的目的是提供多个派生类可以共享的基类的通用定义。例如,一个类库可以定义一个抽象类,用作其许多函数的参数,并要求使用该库的程序员通过创建派生类来提供他们自己的类实现。
参考 C#,可以定义不包含抽象方法的抽象类
是的,一点没错
那么将类定义为抽象有什么用?
主要是为了传达应该派生类的事实。通过使构造函数受保护可以实现类似的效果:没有人将能够创建类的实例而不继承它。
将类定义为抽象可防止它被直接实例化。
基本上,我使用的经验法则是,当必须继承才能实例化类时,您应该始终定义抽象类。因为抽象类本身不能。
例如。假设您有一个 Building 类,它是抽象的。然后必须通过派生类实例化它,例如银行或房屋。Building 类中没有抽象方法的事实与它是否抽象无关。
一个简单的规则是,当你觉得这个特定的类如果单独存在没有意义时,就创建抽象类(无论它包含或不包含抽象方法) ......
因此使用抽象类时
- 你不允许抽象类的对象的实例化,因为它对于那个目的来说太笼统了
- 但同时允许你给出一些可以被其他类继承的方法的具体实现,这对你设计的层次结构很有帮助
您可以将一个类定义为抽象类并且其中没有方法......但是,您将无法对它做任何事情,因为它只能由其他类继承而不能自行实例化。
- 您不能创建抽象类的实例。
- abstract 关键字使您能够创建不完整且必须在派生类中实现的类和类成员。
- 抽象类的目的是提供多个派生类可以共享的基类的通用定义。
抽象类可以包含抽象方法以及普通(具体方法)。
抽象类的目的是用作可以被其他类继承的基类。这样做的好处是多个子类可以利用基类(抽象类)中的方法,而不必再次重写相同的方法。
您定义一个类abstract
以保留定义抽象成员的可能性。
确实可以避免这样做,但在这种情况下,它的意义就更少了。
可以做其他类似的问题:
为什么我可以定义一些函数
virtual
,即使没有人会覆盖它。?
当然,这些是不同的概念,但提出问题的想法是相同的。
希望这可以帮助。