21个常见的OOP面试问题和今天要知道的答案
已发表: 2022-09-20面向对象编程面试问题可以帮助程序员和开发人员增强他们对编程世界中关键概念的了解。
OOP 是最必要和最需要的编程范式之一,专注于对象和类而不是过程和函数。
一些基于 OOP 的编程语言是 Objective-C、Java、Ada、Perl、Python、C++ 等。
大公司寻求精通面向对象方法和模式的开发人员。
因此,如果您打算参加这样的面试过程,您必须对 OOP 概念有深入的了解。
让我们看看一些常见的OOP面试问题和答案,以帮助您准备面试和测试。
面向对象编程 (OOP):概述

OOP 是一种以对象为中心的编程范式。 在这里,对象被视为真实世界的实例,就像一个包含类模板中指定的一些行为和特征的类。
例如,让我们考虑一辆汽车。 根据 OOPs 模型:
- 对象:一辆汽车。 它可以是任何类型或型号,例如您拥有的汽车。
- 类别:汽车的型号或类型,例如宝马、雪佛兰、起亚、奥迪等。
- 特征:汽车的颜色、汽车的底盘号、发动机类型、齿轮类型等。
- 行为:如何换档,如何启动汽车,等等。
在这里,特性也称为属性、属性或数据,而行为在编程语言中称为过程、方法或函数。
所以,让我们从一些常见的 OOP 面试问题开始。
术语 OOP 是什么意思?
答:面向对象编程(OOP)是一种基于对象和类而不是过程和函数的编程模型。 单个对象被安排到类中。 OOP 使用多态性、隐藏、继承等概念和编程范式来描述现实世界的实体。
OOP 将代码和数据绑定在一起。 对象是通过具有特定特征和行为的类定义的真实世界实体,而类被定义为特定对象的模式。 它也称为用户定义的数据类型。
这包括设计和制造程序以及移动应用程序。 例如,您可以将 OOP 用于制造系统仿真软件。
除了 OOP 之外,还有哪些其他编程范式?

答:编程范式是根据每种语言的特性对编程语言进行分类的方法。 有两种类型的编程范式:
- 命令式编程范式:它侧重于如何执行逻辑并定义控制流。 它包括过程编程范式、面向对象编程 (OOP) 和并行编程。
- 声明式编程范式:它专注于在程序中执行什么并定义其逻辑,而不是控制流。 它包括逻辑编程范式、函数式编程范式和数据库编程范式。
OOP 和 SOP 有什么区别?
答:我们通过这张表来了解OOP和SOP的区别:
面向对象编程 | 面向结构的编程 |
它是一种基于对象而不是过程和函数的编程模型。 | 它为程序提供了一个逻辑结构,其中程序被划分为功能。 |
遵循自下而上的方法 | 遵循自上而下的方法 |
提供数据隐藏或封装 | 它不提供数据隐藏 |
它可以解决复杂的问题。 | 它可以解决中等问题。 |
低冗余作为代码可以再次使用 | 它不支持代码可重用性。 |
更灵活 | 不太灵活 |
它的主要关注点是数据。 | 它主要关心的是程序的逻辑结构。 |
OOP的主要特点是什么?

答:以下是 OOP 的主要特点:
- 遗产
- 封装
- 抽象
- 多态性
- 方法覆盖
- 方法重载
- 对象
- 课程
- 构造函数和析构函数
继承、多态和封装是 OOP 的基本元素,它们将这些特性与非 OOP 语言区分开来。
什么是封装?
答:封装是一种将类、变量、方法等放入胶囊中的方法,该胶囊需要完成工作并向用户呈现相同的胶囊。 简单来说,就是把所有必要的方法和数据放在一起,对用户隐藏不必要的细节。
也可以用其他方式定义:
- 数据绑定:封装是将数据成员与方法绑定在一起作为一个类或作为一个整体的过程。
- 数据隐藏:封装是隐藏不必要信息的过程,例如对对象成员的访问限制等。
什么是多态性?

回答:让我们通过将术语分成构成它的两个词来理解多态性:
“聚”的意思是“许多”
“变形”的意思是“形状”
因此,多态性可以描述为具有不同形状的对象。
在 OOP 中,它被称为一些数据、对象、方法或代码在多个上下文或环境下表现不同的过程。 OOPs 模型中有两种类型的多态性:
- 运行时多态性
- 编译时多态性
换句话说,它是单个接口的多个定义。 例如,有一个名为'vehicle'的类,它包含一个方法'speed'。 由于不同的车辆具有不同的速度,因此无法定义速度。 因此,这可以在各种车辆的各种定义的子类中定义。
什么是静态多态?
答:静态多态也称为编译时多态。 它是对象可以根据值与相应的运算符或函数链接的特征。 这可以通过运算符重载或方法重载来实现。
在这里,方法使用相似的名称,但每个名称的参数不同。 对于类似的触发器,该对象的行为不同。 因此,多个方法在同一个类中实现。
什么是动态多态性?

答:动态多态也称为运行时多态。 它指的是 OOP 中的多态类型,通过它在执行或运行时确定函数的实际合并。 它可以通过方法覆盖来实现。
例如,创建了两个类,bike 和 Yamaha,并且 Yamaha 类扩展了 bike 类,覆盖了它的 run() 方法。 由于子类方法覆盖了父类方法,因此它在运行时被调用。
什么是类?
答:类可以定义为包含一些值的蓝图或模板,称为成员数据。 它还包括一些规则,称为功能或行为。 创建对象时,它会自动获取类中定义的函数和数据。
但是,类是对象的蓝图或模板。 可以根据类的要求设计尽可能多的对象。 例如,首先创建汽车的模板。 之后,根据汽车的模板设计不同的汽车单元。
什么是对象?

答:对象可以定义为一个类的实例,该类包含模板中定义的行为和成员的实例。 对象是用户与之交互的实际实体,但类只是该对象的蓝图。
因此,对象具有某些特征或行为并占用空间——例如,特定的汽车模型。
类和结构有什么区别?
答:让我们借助一张表格来理解这一点:
班级 | 结构 |
类是引用类型。 | 结构是值类型。 |
它被分配到堆内存。 | 它分配在堆栈内存上。 |
大引用类型的分配更便宜 | 值类型的分配比引用类型便宜 |
它具有无限的功能。 | 它的功能有限。 |
类用于大型程序。 | 结构用于小程序。 |
它包含一个构造函数和一个析构函数。 | 它包含参数化或静态构造函数。 |
它每次创建实例时都使用 new() 关键字。 | 它可以轻松创建带有或不带有任何关键字的实例。 |
一个类可以继承自另一个类。 | 不允许继承结构。 |
可以保护类的数据成员。 | 无法保护结构的数据成员。 |
函数成员可以是抽象的或虚拟的 | 函数成员不能是抽象的或虚拟的 |
类的两个不同变量可以包含相似对象的引用。 | 每个变量都包含自己的副本。 |
什么是继承?

答:继承是 OOP 的特性之一,它使一个类能够继承另一个类的主要属性。 例如,如果“vehicle”是一个类,那么“car”、“bike”等是可以从“vehicle”类继承关键属性的其他类。

此功能有助于摆脱冗余代码; 因此,减少了代码的大小。 简单来说,继承被定义为从父类到子类的属性的接收者。 这里,'vehicle' 是父类,'car' 或 'bike' 是上例中的子类。
这样,您可以在另一个类中重用一个类的编程代码,而无需再次编写相同的代码或在此过程中浪费时间。
有哪些不同类型的继承?
答: OOPs 模型中使用了多种类型的继承,例如:
- 单一继承:定义为单一类继承单一基类的通用功能的继承。
- 多重继承:当单个类继承多个类时出现。
- 多级继承:这意味着一个类继承自其他类,这些类是其他类的子类。
- 层次继承:指一个类有多个子类的继承。
- 混合继承:它是多级继承和多重继承的结合。
继承的限制是什么?

答:继承的一些限制如下:
- 它增加了执行程序所需的工作量和时间。 这是因为它需要经常从一个班级跳到另一个班级,这需要时间。
- 父类与子类耦合非常紧密,因此灵活性较差。
- 它需要仔细合并,否则会导致结果不充分或不正确。
- 程序中的一次修改可能会导致父类和子类中的代码发生变化。
什么是抽象?
答:抽象是 OOP 的元素之一。 抽象的关键作用是处理复杂性。 这是通过向用户隐藏不需要的详细信息来完成的。 这允许用户在抽象之上实现复杂的逻辑,而无需考虑隐藏的复杂性。
例如,如果您是咖啡爱好者,您需要知道使用咖啡机制作一杯咖啡时要添加多少牛奶、咖啡豆和方糖。 思考那台机器的工作原理是没有意义的。 咖啡机是一个隐藏的复杂性,你不需要知道,但制作咖啡的过程是必要的。
有两种类型的抽象:
- 数据抽象
- 过程抽象
什么是构造函数?

答:构造函数是类或结构中的一种特殊方法,其名称与类名相似。 它服务于初始化对象所需的目的。 它还有助于实例化成员数据以及将对象分配给类的方法。
在创建构造函数时,需要牢记以下几点:
- 它的命名与类名相同。
- 它不能是抽象的、最终的或静态的。
- 它没有任何返回类型变量。
C++中有哪些不同类型的构造函数?
答: C++中的构造函数主要有以下三种:
- 默认构造函数:定义中没有参数或参数的构造函数。 这种类型的构造函数用于用实值初始化数据成员或变量。
- 参数化构造函数:它在声明和定义中包含参数或参数。 多个参数可以通过参数化构造函数。 它用于重载以了解多个构造函数的差异。
- 复制构造函数:它是一个成员函数,它使用另一个类似类的对象来初始化一个对象。 此外,它有助于将数据从单个对象复制到另一个对象。
什么是析构函数?

答:析构函数是在销毁对象时自动调用的方法。 它执行某些操作:
- 恢复对象初始化期间之前分配的堆空间
- 关闭数据库连接和文件
- 释放网络资源和资源锁
- 执行各种家政任务
换句话说,析构函数会破坏由构造函数初始化的对象。 它是一个特殊的成员函数,与类名同名,但前面有一个 (~) 符号。 析构函数可以重载,因为它是单向函数。
什么是垃圾收集 (GC)?
答:垃圾收集 (GC) 是一种内置于 Java 和 C# 等编程语言中的内存回收元素。 支持 GC 的编程语言至少包含一个垃圾收集器,可以自动释放程序中不再需要的内存空间。
垃圾收集确认程序仍在其内存配额内。 它可以防止开发人员手动管理程序的内存,从而最大限度地减少与内存相关的错误。
什么是异常处理?

答:异常处理是一种在计算机程序运行时响应意外事件的方法。 程序员必须“处理”不需要的事件(异常)以防止系统或程序崩溃。 如果没有这种方法,异常可能会破坏程序的正常运行并导致效率低下或风险。
什么是 try/catch 块?
答: Try或catch是表示程序执行过程中由于编码或数据错误而导致的异常处理的关键字。
- try块是发生异常的代码块
- catch块处理和捕获 try 块异常
try和catch语句经常用于各种编程语言,包括 C++。 C#、Java、SQL 和 JavaScript。 每个try语句都与一个catch语句匹配以处理执行。 在try和catch语句中还需要记住以下几点:
- try 块后面是 catch 块。
- 一个 try 块后跟至少一个 catch 块。
- 一个try 块之后是另一个try 块,然后是catch 块。
结论
OOP 是程序员必须了解的基本概念。 彻底学习它还将帮助您在使用 OOP 概念的语言中进行良好的编程。
如果您正在准备面试或测试,上述面试问题和答案将帮助您刷新对 OOP 概念(如类、对象、封装、多态性、继承、抽象等)的理解。 这样,您就可以自信地面对面试并成功通过面试,从而建立您的职业生涯。
您还可以查看其中一些 SQL 面试问题。