Oop 抽象类与设计点的接口有何不同?
我在stackoverflow上看到了很多答案,但我没有找到与我的答案相匹配的答案。 除了所有这些区别,如果我们说抽象类抽象行为的实现,而接口抽象实现行为的类型,这有意义吗 接口不能提供任何实现。抽象类可以(并且通常确实)提供一些实现Oop 抽象类与设计点的接口有何不同?,oop,Oop,我在stackoverflow上看到了很多答案,但我没有找到与我的答案相匹配的答案。 除了所有这些区别,如果我们说抽象类抽象行为的实现,而接口抽象实现行为的类型,这有意义吗 接口不能提供任何实现。抽象类可以(并且通常确实)提供一些实现 接口不能提供任何实现。不是真的不行,因为抽象类不需要实现任何行为。它可能应该,因为否则你可能会争论它的有用性,但它不是必须的。不是真的不,因为抽象类不需要实现任何行为。它可能应该这样做,因为否则你可能会争辩它的有用性,但它不一定非得如此。从设计角度来看,它的主要区
接口不能提供任何实现。不是真的不行,因为抽象类不需要实现任何行为。它可能应该,因为否则你可能会争论它的有用性,但它不是必须的。不是真的不,因为抽象类不需要实现任何行为。它可能应该这样做,因为否则你可能会争辩它的有用性,但它不一定非得如此。从设计角度来看,它的主要区别在于:
- 通过在基本抽象类中创建受保护的构造函数,可以在实现类的构造函数上声明约定
- 您可以提供基类可用的方法的实现
- 您可以围绕合同制作包装(例如,验证方法参数)
- 当您创建调用由派生类实现的类型的抽象方法的非抽象方法时,可以提供“调用方案”。这对于在派生类中实现算法的抽象非常有用,而基类实现所有处理逻辑—准备和验证数据,并让实际的处理算法由派生类实现
- 通过在现有类上实现接口,您只需声明将接口方法添加到类的约定中。该类可能已经实现了接口的所有方法,您不需要更改现有类中的任何内容
- 通过将基类更改为抽象类,您需要重写所有方法,即使该类型上已经存在与基类的抽象方法同名的方法
- 通过在基本抽象类中创建受保护的构造函数,可以在实现类的构造函数上声明约定
- 您可以提供基类可用的方法的实现
- 您可以围绕合同制作包装(例如,验证方法参数)
- 当您创建调用由派生类实现的类型的抽象方法的非抽象方法时,可以提供“调用方案”。这对于在派生类中实现算法的抽象非常有用,而基类实现所有处理逻辑—准备和验证数据,并让实际的处理算法由派生类实现
- 通过在现有类上实现接口,您只需声明将接口方法添加到类的约定中。该类可能已经实现了接口的所有方法,您不需要更改现有类中的任何内容
- 通过将基类更改为抽象类,您需要重写所有方法,即使该类型上已经存在与基类的抽象方法同名的方法
class MyServer(Networkserver):
// process() is called whenever a client has sent a request
function process(data):
...
通过使类抽象,因此无法实例化,专门化函数不必有一些适当的“默认”行为。通常,抽象类实现一些行为,但保留一些未实现的专门化行为 例如,您可以编写一个实现网络应用程序服务器的类,但不实现流程函数,而是将其留给继承的类来实现
class MyServer(Networkserver):
// process() is called whenever a client has sent a request
function process(data):
...
通过使类抽象,因此无法实例化,专门化函数不必有一些适当的“默认”行为。接口=纯抽象类(没有实现的抽象类)接口=纯抽象类(没有实现的抽象类)纯粹从设计的角度来看,接口与语言无关,它是类与客户端之间的契约,承诺它做什么,而不是如何做。这是“程序到接口”咒语中暗含的用法 <>因为C++等语言没有接口,抽象类是唯一的表示方法。对于接口为