我最近接受了两次电话采访,被问及接口和抽象类之间的区别。我已经解释了我能想到的每一个方面,但似乎他们在等我提一些具体的事情,我不知道那是什么。
根据我的经验,我认为以下是正确的。如果我遗漏了一个要点,请告诉我。
界面:
接口中声明的每一个方法都必须在子类中实现。接口中只能存在事件、委托、属性 (C#) 和方法。一个类可以实现多个接口。
抽象类:
只有抽象方法必须由子类实现。抽象类可以具有带有实现的普通方法。除了事件、委托、属性和方法之外,抽象类还可以具有类变量。由于 C# 中不存在多重继承,一个类只能实现一个抽象类。
虽然您的问题表明它是针对“一般 OO”的,但它似乎确实专注于 .NET 对这些术语的使用。
在 .NET 中(Java 类似):
作为一般的 OO 术语,这些差异不一定是明确定义的。例如,有些 C++ 程序员可能持有类似的严格定义(接口是抽象类的严格子集,不能包含实现),而有些人可能会说具有某些默认实现的抽象类仍然是接口或非抽象类仍然可以定义一个接口。