C语言面向对象编程(四):基于接口的编程
发布时间
阅读量:
阅读量
在 Java 语言中,存在 interface 关键字用于定义接口,而在 C++ 中则可以通过抽象类或纯虚类实现与接口相似的功能。此外,在 C 语言中同样可以模拟出类似接口的特性。
在对 Java 程序员进行面试时,我常常会提出这样一个问题:接口与抽象类之间存在哪些差异?
许多编程相关的书籍也常强调应遵循面向接口编程的原则。根据我的理解,接口强制要求派生类必须实现基类(即接口)所定义的契约内容,而抽象类则允许通过继承机制实现部分功能,从而使得派生类可以选择不实现(或重写)基类所定义的契约内容。通常情况下这不会造成问题,但在某些特定场景下,这种设计方式似乎并不那么合适。
例如,在定义一个 Shape 基类时,其中包含一个 draw() 方法,并为其提供一个默认的实现(通常是空函数体),这样的设计实际上并无实际意义。
再比如当基类修改了某个方法的具体实现方式时,如果派生类通过继承机制获取该方法但并未进行重写,则可能会引发一些难以预料的问题。以鸟类为例,假设基类为 Bird,并定义了 fly() 和 walk() 两个方法。由于某些人认为鸟类既能行走也能飞翔,在最初对 walk() 方法的实现中假定双脚交叉前进是行走的方式。然而后来发现有些鸟类并非如此移动方式,而是双脚同时跳跃前行。此时该如何处理?是否需要修改基类 Bird 中的 walk() 方法?又该如何调整?
在 C++
全部评论 (0)
还没有任何评论哟~
