我知道抽象类是一种无法实例化的特殊类。抽象类只能被子类化(继承自)。换句话说,它只允许其他类继承它,但不能实例化。优点是它可以为所有子类强制执行某些层次结构。简单来说,它是一种强制所有子类继承相同层次结构或标准的契约。
我也知道接口不是一个类。它是由“接口”一词定义的实体。接口没有实现;它只有签名,或者换句话说,只有没有主体的方法的定义。作为与抽象类的相似之处之一,它是一种契约,用于定义所有子类的层次结构,或者它定义了一组特定的方法及其参数。它们之间的主要区别在于,一个类可以实现多个接口,但只能从一个抽象类继承。由于 C# 不支持多重继承,因此使用接口来实现多重继承。
当我们创建一个接口时,我们基本上是在创建一组没有任何实现的方法,这些实现必须被实现的类覆盖。优点是它为一个类提供了一种成为两个类的一部分的方法:一个来自继承层次结构,一个来自接口。
当我们创建一个抽象类时,我们正在创建一个基类,它可能具有一个或多个已完成的方法,但至少有一个或多个方法未完成并声明为抽象类。如果抽象类的所有方法都未完成,那么它与接口相同。
但是 但是 但是
我注意到我们将在 C# 8.0 中使用默认接口方法
也许我问它是因为我只有 1-2 年的编程经验,但是现在抽象类和接口之间的主要区别是什么?
我知道我们不能在界面中制作状态,它们之间只有一个区别吗?