In today’s world, we do not have to worry about finding an approach to design software and maintaining its standard procedures and robustness. All thanks to object-oriented programming because it brings a structured approach to the coding industry and a revolution in programming techniques that we are familiar with. Without it, we cannot comprehend anything about a perfect solution to all basic limitations in programming. Hence, OOP is one of the subjects most frequently asked about in any coding interview.
In this article, we have discussed top OOP interview questions and answers with examples for 2024. You will get an idea about frequently asked OOP interview questions along with some advanced questions and problem-solving coding questions that will help you prepare for the interview.
Frequently Asked OOPs Interview Questions
1. What is Object Oriented Programming?
It is a programming model based directly upon the concept of “objects”. Objects refer to anything you assume, like any certain object used in a game while conducting game development. For example, game characters and many other objects that repeat themselves. Hence, we can reuse those components again and again with a minimal amount of code. There are many OOP methods, such as reusability, abstraction, polymorphism, etc.
2. What is the difference between OOP and SOP?
Feature
Object-Oriented Programming (OOP)
Structured Oriented Programming (SOP)
Basic Concept
Based on objects and classes
Based on functions and procedures
Modularity
High modularity with reusable objects
Functions/modules used for modularity
Data Handling
Encapsulates data and functions together
Separates data and functions
Focus
Focuses on data rather than procedures
Focuses on procedures and logic
Inheritance
Supports inheritance to create new classes
Does not support inheritance
Polymorphism
Supports polymorphism for method overloading
Does not support polymorphism
Encapsulation
Strong encapsulation; data hiding is possible
Limited encapsulation; global variables used
Reusability
High reusability of code through classes and objects
Moderate reusability through functions
Complexity Management
Manages complexity through objects and interactions
Manages complexity through function calls
Examples
Java, C++, Python, C#
C, Pascal, Fortran
3. What is the function of a super keyword?
The super keyword is used to call the constructor method of the parent class from the base class. It is also used to refer to the methods of the parent class that are overridden in the base class.
4. What is a class?
A class in OOP can be represented as a blueprint for creating different objects. Those objects will further help in reusability and abstraction. An OOP class possesses different properties (attributes) and Behaviours (methods) that all the objects present in that class would have.
5. What is an object?
An object will act as an instance of a defined class. Hence object refers to any real-world entity and that entity will have its own properties and attributes. To create a complex system that has a huge amount of encapsulated data, objects play a very crucial role.
6. Define a subclass and a superclass.
When there are many multiple objects or particularly multiple classes, then superclass and subclass help to define which property of other classes is inherited by our new class. A superclass (parent class) is a class that is extended or inherited by other classes. Hence, a superclass’s properties are shared by those other classes. While a subclass (child class) inherits different methods and attributes from its superclass, along with its own individual attributes.
7. What are Getters and Setters?
Getters and setters are used to access and modify the private fields of a class, like private names, data types, values, or any kind of attributes. Getters try to retrieve the value of a field while setters update those values.
Here is a C++ code to understand more about how they are used:
class Person {
private:
string name;
int age;
public:
string getName() {
return name;
}
void setName(string newName) {
name = newName;
}
};
8. What are the types of variables in OOP?
There are several types of variables in OOP which can be categorised on their scope and lifetime:
Instance Variables (non-static variables): Defined inside a class but outside any method, and each object of the class will have its own copy of instance variables.
Class Variables (static variables): Declared with the ‘static’ keyword within a class.
Local Variables: These can be declared inside a method or code block and accessible within
Parameter Variables: These are local to a method or function and can be used to receive arguments from the caller.
Constants: generally declared using the ‘final’ keyword in Java or ‘const’ in C++, whose values cannot be changed once assigned.
9. What is the difference between a class and a structure?
Feature
Class
Structure
Keyword
Defined using the class keyword
Defined using the struct keyword
Default Access
Members are private by default
Members are public by default
Inheritance
Supports public, protected, and private
Supports only public inheritance
Member Functions
Can have member functions
Can have member functions
Constructor
Can have constructors and destructors
Can have constructors and destructors
Memory Allocation
Allocates memory using the new keyword
Allocates memory using malloc or as a value
Usage
Typically used for complex data structures
Typically used for simple data structures
10. What is the difference between a class, method and an object?
Feature
Class
Method
Object
Definition
Blueprint for creating objects
A function that belongs to a class
An instance of a class
Usage
Used to create objects
Used to define behaviours of a class
Represents a specific instance of a class
Members
Contains data members and methods
Contains code that performs a specific task
N/A (Similar to a variable in non-OOP terms)
Creation
Must be defined before creating objects
Part of a class, instantiated with objects
Created from a class using constructors
Relationship
Multiple objects can be created from a class
Methods are part of a class
An object is an instance of a class
Example
class Car { … };
void Drive { … };
Car myCar;
11. What are the different types of inheritance?
Single inheritance: A class that inherits from only one base class.
Multiple inheritance: This class inherits from multiple base classes.
Multilevel inheritance: Class that inherits from a derived class, creating a chain of inheritance.
Hierarchical inheritance: Multiple classes inherited from a single base class.
Hybrid inheritance: a combination of two or more types of inheritance.
12. What is the difference between multiple and multilevel inheritance?
Feature
Multiple Inheritance
Multilevel Inheritance
Number of Classes
A class can inherit from multiple base classes
A class inherits from a class, which inherits from another class
Complexity
This can lead to complex class hierarchies
Generally simpler and easier to understand
Example
class Derived : public Base1, public Base2 { }
class A { }; class B : public A { }; class C : public B { };
13. Differentiate between overloading and overriding.
Feature
Overloading
Overriding
Definition
Multiple methods in the same class with the same name but different parameters
Replacing a method in a superclass with a method in a subclass with the same name and parameters
Occurrence
Within the same class
Between a superclass and its subclass
Inheritance
Not related to inheritance
Specifically related to inheritance
Usage
Enhances code readability and reduces method name clutter
Allows a subclass to provide a specific implementation of a method that is already provided by its superclass
Example
void print(int a);
void print(double b)
class Animal { void makeSound() { … } };
class Dog : public Animal { void makeSound() { … } }
14. What is garbage collection in OOP?
This is the process where the programming language automatically deallocates the unused memory that is no longer needed or reachable by the program. It helps to manage memory in a more efficient manner, preventing memory leaks and boosting overall performance.
15. What are some commonly used object-oriented programming languages?
Get curriculum highlights, career paths, industry insights and accelerate your technology journey.
Download brochure
Advanced Questions in OOPs Interview
16. What is abstraction?
Abstraction is the hiding of complex implementation details and showing only the essential features of any object in OOP. It helps to focus only on the relevant features and attributes of an object without being concerned about the workings of the internal code. Abstraction can be done using abstract classes and interfaces, which is a blueprint for classes to implement.
17. What is polymorphism?
Polymorphism is like shape-shifting, the ability of objects to be represented in different forms or behaviours based on their data type or classes. Hence in polymorphism, the methods are defined in superclass so that it can be overridden in any subclass, allowing different classes to be treated as the instance of the same class through a common interface.
18. What is the difference between public, private and protected access modifiers?
Access Modifier
Visibility
Accessibility
Inheritance
Public
It can be accessed from anywhere, both within and outside the class, by any other class.
Yes
Yes
Private
It can only be accessed from within the same class.
No
No
Protected
It can be accessed from within the same class, subclasses, and classes in the same package.
Yes
Yes
19. How is an abstract class different from an interface?
Feature
Abstract Class
Interface
Definition
Can have both abstract and concrete methods
Can only have abstract methods
Multiple
Cannot implement multiple inheritance
Can implement multiple inheritance
Variables
Can have instance variables
Cannot have instance variables
Implementation
Can provide a partial implementation of methods
Cannot provide an implementation of methods
Constructor
Can have a constructor
Cannot have a constructor
Final Variables
Can have final variables
Cannot have final variables
Usage
Used to define a base class for other classes
Used to define a contract for implementing classes
20. Differentiate between data abstraction and encapsulation.
Feature
Data Abstraction
Encapsulation
Definition
The process of hiding the complex implementation details and showing only the essential features of an object.
The bundling of data (attributes) and the methods (functions) that operate on the data into a single unit or class.
Focus
Focuses on hiding the implementation complexity and showing only relevant information.
Focuses on bundling the data and methods that operate on the data together.
Usage
Achieved through abstract classes and interfaces in OOP.
Achieved by using access modifiers (public, private, protected) in OOP.
Purpose
Helps in reducing programming complexity and effort.
Helps in achieving data hiding and preventing direct access to data.
21. Why is it important to use design patterns in software development?
Design patterns are important in providing proven solutions to common design problems in software development. There are many different specific design patterns that use OOP concepts like reusability, maintainability, scalability, etc., while also improving the quality and efficiency of the overall software program.
22. What is Cohesion in OOP?
Cohesion refers to the measurement of how focused and tightly related responsibilities of a single module or class are. High cohesion means that the object class or particular module has only one dedicated task, while low cohesion means there are multiple unrelated tasks/responsibilities of that class.
23. What are the different types of Polymorphism?
The two main types of polymorphism are:
Compile-time (static) polymorphism: This is done using function overloading and operator overloading. The compiler defines which function or operator to call based on the arguments given at compile time.
Run-Time (dynamic) polymorphism: By using method overriding in case the specific implementation of a method is given at runtime, based on the actual type of called object, the run-time polymorphism is achieved.
24. What is the Liskov Substitution Principle (LSP)? How does it relate to inheritance and polymorphism?
LSP states that the objects of a superclass must be replaceable with the objects of its subclasses, and it should not affect the correctness of the program. Hence a subclass should be able to substitute for its superclass without changing the overall behaviour of the program.
It is closely related to inheritance and polymorphism because, in inheritance, a new class (subclass) is created from the existing superclass, and on the other hand, polymorphism allows different class objects to be treated as a common superclass. LSP ensures that subclasses adhere to superclasses by enabling polymorphic substitution, creating a strong relationship between classes in an inheritance hierarchy.
25. How much memory does a class occupy?
The memory occupied depends on the size of its instance variables, methods and any additional functions in inheritance. Moreover, the exact memory usage by a class can vary based on the compilers used and the programming language itself.
26. What are the advantages and disadvantages of OOPs?
Advantages
Disadvantages
Modularity
Complexity
Reusability
Difficulty
Flexibility
Efficiency
Productivity
Cost
Maintainability
Learning Curve
27. What is a Constructor, and what is a destructor? Also, mention types of constructors.
A special type of method in a class that can be automatically called during object creation is called a constructor. There are many types of constructors, such as parameterised constructors, copy constructors, default constructors, and constructor overloading.
On the other hand, a destructor is a method that is called when the object has gone out of scope or completely destroyed. Hence it is used to free resources, like memory or file handles. Generally, there is only one type of destructor. However, in some languages like C++, the concept of “virtual destructor” exists.
28. Can we overload the constructor or destructor in a class?
Yes, this can be done in many languages, like C++ and Java. In Java, overloading constructors is done to create objects with different initialisations or behaviours. But Java does not have destructors in the same manner as C++, as Java has automatic garbage collection.
In C++, constructor overloading allows the creation of objects in different initialisations, along with overloading destructors. Destructor overloading is not recommended due to the automatic and volatile nature of destructor calls.
29. What is pure virtual function?
A pure virtual function is declared in a base class but has zero implementation. It can be done using the ‘virtual’ keyword and assigning the value 0 to it. Classes that contain pure virtual functions are abstract classes and cannot be instantiated. Hence, subclasses must override pure virtual functions to provide implementations.
30. What is the difference between shallow copy and deep copy? When would you use each?
Shallow copy is used to copy the reference to objects so that objects are not duplicated by themselves. A deep copy creates a new copy of the object itself and all its elements. We can use shallow copy when we want to duplicate an object’s references. Using deep copy signifies complete duplication of an object along with its elements.
31. What is the purpose of the ‘this’ keyword?
It is generally used to refer to the current object instance, primarily to access the method or variable of the current object and also to showcase the difference between class attributes and method parameters with the same name.
Code-based Practical OOP Interview Questions
32. Implement an abstract class in C++ with an abstract method.
Program:
#include <iostream>
using namespace std;
class AbstractClass {
public:
virtual void abstractMethod() = 0; // Pure virtual function
};
class ConcreteClass : public AbstractClass {
public:
void abstractMethod() {
cout << "Implementation of abstractMethod" << endl;
}
};
int main() {
ConcreteClass obj;
obj.abstractMethod();
return 0;
}
33. Create a class that uses composition to create a “has-a” relationship with another class in Python.
Program:
class Engine:
def start(self):
print("Engine started")
def stop(self):
print("Engine stopped")
class Car:
def __init__(self):
self.engine = Engine()
def start(self):
print("Car starting...")
self.engine.start()
def stop(self):
print("Car stopping...")
self.engine.stop()
# Create a Car instance
car = Car()
# Use the Car's start and stop methods
car.start()
car.stop()
34. Implement a Singleton class in Java.
Solution Program:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
35. Predict the output of the following
Question Program:
class Animal {
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
animal.makeSound();
}
}
<strong>Output: </strong>Dog Barks
Explanation: The ‘makeSound’ method of the ‘Dog’ class overrides the method of the ‘Animal’ class, invoking the method of the ‘Dog’ class due to dynamic method dispatch – a feature of polymorphism.
Real-life application based OOPs Interview Questions
36. One of the key OOP interview questions could be to give a real-life example of data abstraction.
You can give one real-life scenario by taking the example of the car dashboard. In that, the dashboard shows essential info like fuel, speed, and temperature without revealing complex internal mechanisms. The driver interacts easily with simplified controls, allowing users to operate the vehicle without needing to understand its inner workings. Hence abstracting away the complex internal functions, which are time-consuming and difficult to understand.
37. Can we run a Java application without implementing the OOPs concept?
Yes, you can run a Java application by using procedural programming. Java supports procedural code, which allows the use of static methods and variables within a single class containing the ‘main’ method.
38. Describe how you would refactor a legacy system to incorporate appropriate design patterns for better maintainability
To do this, first find the areas with tightly coupled code, which is unstructured and may contain possible errors. Design patterns like Singleton for shared resources can be used. Along with it, design patterns like Factory for object creation, Strategy for interchangeable behaviours, etc., can be done.
39. Can you discuss the trade-offs between using a design pattern and not using it?
By using a design pattern, you can get information about the maintainable and scalable code, commonly changing code, which may contain possible problems. However, changing it can also introduce more complexity to the project, especially when the code is not properly understood.
Not using a design pattern can also result in ad-hoc solutions that are even harder to maintain and extend in long-term projects.
40. Name three operators in C++ that can’t be overloaded.
Member Selection Operator(.)
Pointer to Member Selection Operator(->)
Scope Resolution Operator(::)
Sizeof Operator
Interview Questions on Common OOP Design Patterns and Problems
41. Can you name some of the common design patterns?
Factory Method Pattern
Observer Pattern
Strategy Pattern
Singleton Pattern
Decorator Pattern
Adapter Pattern
Composite Pattern
Template Method Pattern
Command Pattern
42. Can you explain the difference between structural, creational, and behavioural design patterns?
Aspect
Structural Design Patterns
Creational Design Patterns
Behavioural Design Patterns
Purpose
Concerned with object composition and class structure.
Concerned with the process of object creation.
Concerned with object interaction and responsibility.
Intent
Focuses on how classes and objects are composed to form larger structures.
Focuses on providing mechanisms for creating objects in a manner suitable to the situation.
Focuses on the interaction between objects and how they operate together in a system.
Examples
Adapter, Composite, Decorator
Singleton, Factory Method, Builder
Observer, Strategy, Template Method
Use Cases
When you want to simplify the structure of a system.
When you want to control the instantiation process, ensure consistency and flexibility.
When you want to define how objects interact in a system without specifying their concrete classes.
43. What is a final block?
A final block is used in Java within a try-catch-finally statement to always execute the code without any errors. Whenever any error comes, code is executed regardless if it throws out an exception or not.
44. How can you handle situations where there are too many observers in the Observer pattern?
To handle situations like this, you can consider the following approaches:
Reduce the number of notifications (only relevant changes)
Using a mediator that manages observers and reduces direct coupling between subjects and observers
Batch updates regularly
Using a different pattern also helps, such as the Pub/Sub (Publisher/Subscriber) pattern, to handle large numbers of subscribers more efficiently.
45. How can you ensure that a Singleton class is thread-safe?
Here to ensure that a singleton class is thread-safe, you can take the help of synchronisation techniques like the double-checked locking or synchronised method to control access to the instance creation method.
Exception Handling Questions in OOPs Interview
46. What is the difference between an error and an exception?
Aspect
Error
Exception
Definition
An Error indicates serious problems that a reasonable application should not try to catch.
An Exception indicates conditions that a reasonable application might want to catch.
Handling
Errors are typically not caught or handled by the application.
Exceptions are meant to be caught and handled by the application.
Types
Examples include OutOfMemoryError and StackOverflowError.
Examples include NullPointerException and IOException.
Causes
Typically caused by the environment or virtual machine, not by the application’s code.
Typically, this is caused by the application’s code, such as invalid user input or resource unavailability.
Impact
Errors are typically unrecoverable and may lead to the termination of the application.
Exceptions can often be handled gracefully, allowing the application to continue execution.
47. What is a try/catch block?
It is used to handle exceptions in Java. The code which possibly throws an exception is placed in the try block, and the catch block is used to output the exception if it occurs.
Program:
try {
int result = 10 / 0; // This will throw an ArithmeticException
} catch (ArithmeticException e) {
System.out.println("An error occurred: " + e.getMessage());
}
48. List down the limitations of Object-Oriented Programming.
The following can be the limitations of OOP:
Overloading and Performance Overhead
Difficulty in Modelling real-world systems
Not suitable for all types of problems
May end up being very complex designs
Steeper learning curve
49. Explain the difference between checked and unchecked exceptions in Java.
Aspect
Checked Exceptions
Unchecked Exceptions
Definition
Must be caught or declared in the method signature.
It can be caught or not caught without requiring a catch or throws clause.
It must be handled using the try-catch or throws keyword.
Optional to handle; can be handled but not required.
Impact
Checked at compile-time; helps in ensuring proper exception handling.
It is not checked at compile-time; it can lead to runtime exceptions if not handled properly.
Purpose
Used for recoverable conditions that a method should anticipate and handle.
Typically used for programming errors or conditions that should not occur during normal operation.
50. Are there any limitations on Inheritance?
Yes, some of the limitations are:
Tight Coupling: Inheritance can sometimes create tight coupling between classes, hence making the code harder to refactor and maintain.
Inherited Members: Those derived classes inherit all members of the base class, including very unnecessary ones also which can lead to confusion and overall performance can be impacted.
Limited to Single Inheritance: Some of the languages support single inheritance, and flexibility is greatly affected.
Fragile Base Class Problem: If you want to make changes to the base class, you must require modifications to all derived classes, which can be error-prone and time-consuming
Inheritance Depth: Deep inheritance hierarchies sometimes become very complex and difficult to understand, again time-consuming and leading to maintenance challenges.
In conclusion, these interview questions will help you find out the true nature of interview rounds and what type of questions can be asked. Preparation in each sub-field is necessary to easily answer all the interview questions.
Hero Vired is a leading LearnTech company dedicated to offering cutting-edge programs in collaboration with top-tier global institutions. As part of the esteemed Hero Group, we are committed to revolutionizing the skill development landscape in India. Our programs, delivered by industry experts, are designed to empower professionals and students with the skills they need to thrive in today’s competitive job market.