如果你有一个只有抽象方法的Abstract类怎么办?这与界面有什么不同?

9 c# oop abstract-class interface

根据我的经验,我认为以下是正确的.如果我错过了重点,请告诉我.

接口:

在接口中声明的每个单独的方法都必须在子类中实现.接口中只能存在事件,代理,属性(C#)和方法.一个类可以实现多个接口.

抽象类:

只有抽象方法必须由子类实现.Abstract类可以有实现的常规方法.Abstract类还可以在Events,Delegates,Properties和Methods旁边有类变量.由于C#中不存在多重继承,因此类只能实现一个抽象类.

所以,即使这种差异也无法解释这个问题

1)如果你有一个只有抽象方法的Abstract类怎么办?这与界面有什么不同?

2)如果你在界面中有一个Public变量,那么它与Abstract Class有什么不同呢?

所以任何解释都会有所不同.

Mah*_*esh 2

虽然您的问题表明它是针对“一般 OO”,但它似乎确实关注这些术语的 .NET 使用。

  • 接口可以没有状态或实现
  • 实现接口的类必须提供该接口的所有方法的实现
  • 抽象类可能包含状态(数据成员)和/或实现(方法)
  • 抽象类可以被继承而不实现抽象方法(尽管这样的派生类本身就是抽象的)
  • 接口可能是多重继承的,抽象类则可能不是(这可能是接口与抽象类分开存在的关键具体原因 - 它们允许多重继承的实现,从而消除了一般 MI 的许多问题)。

作为一般的面向对象术语,这些差异不一定是明确定义的。例如,有些 C++ 程序员可能持有类似的严格定义(接口是不能包含实现的抽象类的严格子集),而有些人可能会说具有某些默认实现的抽象类仍然是一个接口,或者是一个非抽象类。类仍然可以定义接口。

事实上,有一种称为非虚拟接口 (NVI) 的 C++ 习惯用法,其中公共方法是“thunk”到私有虚拟方法的非虚拟方法:

http://www.gotw.ca/publications/mill18.htm http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface

  • 这个答案重申了OP对该问题的原始了解,并完全忽略了实际问题。 (2认同)