抽象类和接口的区别
与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。例如
interface IMethods { void F(); void G(); } abstract class C: IMethods { public abstract void F(); public abstract void G(); }
这里,IMethods
的实现将 F
和 G
映射到抽象方法上,这些抽象方法必须在从 C
派生的非抽象类中重写。
注意:显式接口成员实现本身不能是抽象的,但是当然允许显式接口成员实现调用抽象方法。例如
interface IMethods { void F(); void G(); } abstract class C: IMethods { void IMethods.F() { FF(); } void IMethods.G() { GG(); } protected abstract void FF(); protected abstract void GG(); }
这里,从 C
派生的非抽象类被要求重写 FF
和 GG
,从而提供 IMethods
的实际实现。