Oop 接口类和抽象类之间有什么区别和相似之处?

Oop 接口类和抽象类之间有什么区别和相似之处?,oop,Oop,可能重复: 接口类和抽象类之间有什么区别和相似之处 我的意思是什么时候使用接口,什么时候使用抽象类?在什么条件下一个适合于使用另一个。首先,接口不是类。接口不能指定功能,只能指定所需的名称 接口定义从接口继承的任何类中必须公开的方法和属性。接口不包含实现代码,也不涉及类的任何非公共方面。接口不是一个类,而是一个契约 抽象类是真实类。抽象类的唯一限制是不能直接实例化。相反,您必须实例化从抽象类继承的子类 至于何时使用它们,我会说当对象真的有一个共同的祖先时,你应该考虑从抽象类继承。例如,如果“推

可能重复:

接口类和抽象类之间有什么区别和相似之处


我的意思是什么时候使用接口,什么时候使用抽象类?在什么条件下一个适合于使用另一个。

首先,接口不是类。接口不能指定功能,只能指定所需的名称

接口定义从接口继承的任何类中必须公开的方法和属性。接口不包含实现代码,也不涉及类的任何非公共方面。接口不是一个类,而是一个契约

抽象类是真实类。抽象类的唯一限制是不能直接实例化。相反,您必须实例化从抽象类继承的子类

至于何时使用它们,我会说当对象真的有一个共同的祖先时,你应该考虑从抽象类继承。例如,如果“推销员”和“程序员”都继承自抽象的“雇员”类,那么这是合乎逻辑的

当您想知道类的公共接口是什么样子,但不要求它们在实现方面共享任何公共性时,接口非常有用。例如,在C#中,任何实现IEnumerable接口的类都可以被迭代,并且肯定会实现MoveNext和Current。它可以是列表或数组之类的集合,也可以是调用数据库或web服务甚至生成随机数的生成器(状态机)。IEnumerable的实现不需要共享任何公共代码,接口中指定的方法和属性的名称除外


值得注意的是,在C#中,只能从单个类继承,但可以实现任意多个接口。此外,在C#中,接口通常以大写字母“I”开头,但严格来说这不是必需的。

首先,接口不是类。接口不能指定功能,只能指定所需的名称

接口定义从接口继承的任何类中必须公开的方法和属性。接口不包含实现代码,也不涉及类的任何非公共方面。接口不是一个类,而是一个契约

抽象类是真实类。抽象类的唯一限制是不能直接实例化。相反,您必须实例化从抽象类继承的子类

至于何时使用它们,我会说当对象真的有一个共同的祖先时,你应该考虑从抽象类继承。例如,如果“推销员”和“程序员”都继承自抽象的“雇员”类,那么这是合乎逻辑的

当您想知道类的公共接口是什么样子,但不要求它们在实现方面共享任何公共性时,接口非常有用。例如,在C#中,任何实现IEnumerable接口的类都可以被迭代,并且肯定会实现MoveNext和Current。它可以是列表或数组之类的集合,也可以是调用数据库或web服务甚至生成随机数的生成器(状态机)。IEnumerable的实现不需要共享任何公共代码,接口中指定的方法和属性的名称除外

值得注意的是,在C#中,只能从单个类继承,但可以实现任意多个接口。此外,在C#中,接口按照惯例以大写字母“I”开头,但严格来说这不是必需的