【发布时间】:2018-01-14 11:08:58
【问题描述】:
我最近遇到一个关于抽象类的问题。
抽象类的功能可以通过使用(带有受保护构造函数的常规类+接口)的组合来实现。
使用抽象类比(具有受保护构造函数+接口的常规类)有什么好处。
恕我直言,抽象类的目的是具有需要在整个类层次结构中可用的通用功能。它可以限制子类以通过抽象方法实现某些功能。它可以允许子类覆盖常见的行为。
抽象类不用作具体对象。所以,它不允许实例化抽象类。
但是,我们可以使用常规类+接口来实现同样的事情。
- 将常规类构造函数标记为受保护,因此不能单独创建对象
- 提供常用功能的默认实现并将它们标记为虚拟,以防它们需要被子类覆盖。
- 使用接口强制子类实现某些功能。
那么,Abstract 类是否提供了任何额外的功能?
我想不出其他的了。面试官试图了解抽象类与具有受保护构造函数 + 接口的常规类相比还有哪些其他好处。
【问题讨论】:
-
请不要无故投反对票。我想了解其中的原理。如果这不是正确的问题,我会删除它。
-
普通类可以创建自己的实例,抽象类不能。
-
另外,如果你给一个类添加一个接口,你必须在那个类上实现它,你不能离开实现抽象。所以你的常规类+接口必须实现接口才能编译。为什么要跳过所有这些障碍来实现已经存在的东西?
-
数字 3 是错误的 - 你不能强制一个类既继承自实现接口的类又强制它自己实现所有接口方法。
-
您的建议无论如何都不是一个真正的选择。从您的基类继承的类根本不需要实现接口方法。事实上,除非基类将它们标记为虚拟,否则它甚至无法虚拟覆盖它们。那么在这个场景中,界面的意义何在?这种比较实际上是在抽象类和具有受保护构造函数的常规类之间进行的,它不能作为抽象类的替代品。
标签: c# oop inheritance abstract-class