这篇文章说 Codeproject 抽象类 - 可以有方法声明和方法定义。
但是这篇文章说 programcall 摘要 - 只能有方法声明。
我很困惑。任何人都可以清楚我两者的确切区别是什么?答案 0 :(得分:3)
请参阅此article:
多重继承
一个类可以继承几个接口。
一个类只能继承一个抽象类。
默认实施
接口不能提供任何代码,只能提供签名。
抽象类可以提供完整的默认代码和/或只需要覆盖的详细信息。
访问Modfiers
接口不能具有子,函数,属性等的访问修饰符。一切都假设为公共抽象类可以包含子,函数,属性的访问修饰符 核心VS外围设备
接口用于定义类的外围功能。换句话说,Human和Vehicle都可以从IMovable接口继承。
抽象类定义类的核心标识,并在那里用于相同类型的对象。
同质
如果各种实现只共享方法签名,那么最好使用Interfaces。
如果各种实现属于同一类并且使用共同的行为或状态,则最好使用抽象类。
添加功能(版本控制)
如果我们向接口添加一个新方法,那么我们必须跟踪接口的所有实现并定义新方法的实现。
如果我们向抽象类添加一个新方法,那么我们可以选择提供默认实现,因此所有现有代码都可以正常工作。
字段和常量接口中不能定义任何字段抽象类可以定义字段和约束
答案 1 :(得分:0)
据我所知,抽象类已经可以实现一些方法或变量的值,只要它不实现它们 all (这将使它成为正常的课程)。 界面不能这样做;它只能提供方法和变量存根。
答案 2 :(得分:0)
接口更多是契约 - 它详细说明了在实现它的对象上找到的方法或属性。
抽象类是一个基础对象 - 它可以包含方法,变量和行为 - 但是你不能创建它的具体实现 - 你必须从它继承并扩展它的行为。