OOP principles overview in Java - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how the time it takes to run object-oriented programs grows as the program handles more data or objects.
How does using OOP principles affect the speed of our Java programs?
Analyze the time complexity of this simple Java class using OOP principles.
public class Counter {
private int count = 0;
public void increment() {
count++;
}
public int getCount() {
return count;
}
}
This class uses encapsulation to manage a count value with simple methods to increase and get the count.
Look at what repeats when using this class in a program.
- Primary operation: Calling
increment()method to increase count. - How many times: Depends on how many times the method is called in the program.
Each call to increment() does a simple step, so the time grows directly with how many times we call it.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 increments |
| 100 | 100 increments |
| 1000 | 1000 increments |
Pattern observation: The time grows in a straight line as we do more increments.
Time Complexity: O(n)
This means the time to run grows directly with the number of times we call the method.
[X] Wrong: "Using classes and objects always makes the program slower because of extra steps."
[OK] Correct: The extra steps are usually very small, and the main time depends on how many times methods run, not just on using OOP.
Understanding how OOP principles affect program speed helps you write clear code that also runs efficiently, a skill valued in many programming tasks.
What if the increment() method included a loop that runs through a list each time? How would the time complexity change?
Practice
Solution
Step 1: Recall the four main OOP principles
The four main principles are Encapsulation, Inheritance, Polymorphism, and Abstraction.Step 2: Identify the option not in the list
Compilation is a process of converting code to machine language, not an OOP principle.Final Answer:
Compilation -> Option DQuick Check:
OOP principles exclude Compilation [OK]
- Confusing compilation with abstraction
- Mixing OOP principles with programming processes
Solution
Step 1: Identify the keyword for class inheritance in Java
Java uses the keywordextendsto inherit from a parent class.Step 2: Differentiate from other keywords
implementsis for interfaces,superaccesses parent members, andinheritsis not a Java keyword.Final Answer:
extends -> Option CQuick Check:
Inheritance keyword = extends [OK]
- Using 'implements' for class inheritance
- Confusing 'super' with inheritance keyword
class Animal {
void sound() { System.out.println("Animal sound"); }
}
class Dog extends Animal {
void sound() { System.out.println("Bark"); }
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
a.sound();
}
}Solution
Step 1: Understand method overriding and polymorphism
The objectais declared as Animal but refers to a Dog instance. Thesound()method is overridden in Dog.Step 2: Determine which method runs at runtime
Java uses dynamic method dispatch, so the Dog'ssound()method runs, printing "Bark".Final Answer:
Bark -> Option AQuick Check:
Overridden method runs = Bark [OK]
- Thinking declared type method runs
- Expecting compilation or runtime errors
class Vehicle {
private int speed;
public int getSpeed() { return speed; }
}
class Car extends Vehicle {
public void setSpeed(int speed) { this.speed = speed; }
}Solution
Step 1: Check access to private fields in subclass
The fieldspeedis private in Vehicle, so Car cannot access it directly.Step 2: Analyze the setSpeed method in Car
Car'ssetSpeedtries to assignthis.speed, which is not accessible, causing a compile error.Final Answer:
Cannot access private field 'speed' directly in subclass -> Option AQuick Check:
Private fields inaccessible in subclass [OK]
- Assuming private fields are inherited
- Ignoring access modifiers
double getArea() in a base class or interface and having each shape provide its own implementation?Solution
Step 1: Understand the scenario of method overriding
Each shape class provides its own version ofgetArea(), meaning the method behaves differently depending on the object.Step 2: Identify the OOP principle for multiple forms of a method
This is Polymorphism, where the same method name works differently in subclasses.Final Answer:
Polymorphism -> Option BQuick Check:
Different behaviors for same method = Polymorphism [OK]
- Confusing abstraction with polymorphism
- Thinking inheritance alone handles this
