Skip to main content

Command Palette

Search for a command to run...

Advanced Concepts in Java OOP

Updated
•4 min read
A

I am an engineering student pursuing a degree in Artificial Intelligence and Data Science at Datta Meghe College of Engineering. I have strong technical skills in Full Stack Web Development, as well as programming in Python and Java. I currently manage Doubtly's blog and am exploring job opportunities as an SDE. I am passionate about learning new technologies and contributing to the tech community.

Hey there, buddy! Today, let's dive into some cool advanced concepts in Java OOP. Don't worry, I'll explain everything in the simplest way possible, just like I would if we were chatting over coffee. We'll cover static, abstraction, abstract classes, interfaces, and some neat tricks Java introduced with interfaces. Ready? Let's go!


1. The static Keyword: Fields and Methods

What is static?

Imagine you and your friends are playing a game where the scoreboard is the same for everyone. No matter who scores, the board updates for all. That’s exactly how static works in Java! If something is static, it belongs to the class itself, not to any particular object.

Example:

class Game {
    static int score = 0; // Shared across all players

    void addScore() {
        score++;
    }
}

public class StaticExample {
    public static void main(String[] args) {
        Game player1 = new Game();
        Game player2 = new Game();

        player1.addScore();
        player2.addScore();

        System.out.println("Score: " + Game.score); // Output: Score: 2
    }
}

Key Takeaway:

  • static variables are like a shared scoreboard.

  • static methods can be called without creating an object.

  • They’re great for constants and utility methods!


2. Java Abstraction: The Big Picture

What is Abstraction?

Think about your phone. You press a button to take a photo, but do you know how the camera actually works inside? Nope! That’s abstraction—hiding the complex details and only showing what’s necessary.

Java provides abstraction through:

  1. Abstract Classes

  2. Interfaces


3. Abstract Classes: What They Are and How They Work

What is an Abstract Class?

An abstract class is like a template. You can’t create objects from it directly, but other classes can use it as a blueprint.

Example:

abstract class Animal {
    abstract void makeSound(); // Every animal has a sound, but we don’t define it here!

    void eat() {
        System.out.println("This animal eats food.");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("Bark Bark!");
    }
}

public class AbstractExample {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.makeSound(); // Output: Bark Bark!
        d.eat(); // Output: This animal eats food.
    }
}

Key Takeaway:

  • Abstract classes are like a rough sketch. They give an idea, but details are filled by subclasses.

  • You must implement abstract methods in subclasses.


4. Java Interfaces: Designing Flexible Code

What is an Interface?

An interface is like a contract. It tells a class, "Hey, if you want to be a part of this club, you must follow these rules!"

Example:

interface Vehicle {
    void start();
}

class Car implements Vehicle {
    public void start() {
        System.out.println("Car starts with a key!");
    }
}

class Bike implements Vehicle {
    public void start() {
        System.out.println("Bike starts with a kick!");
    }
}

public class InterfaceExample {
    public static void main(String[] args) {
        Vehicle car = new Car();
        car.start(); // Output: Car starts with a key!

        Vehicle bike = new Bike();
        bike.start(); // Output: Bike starts with a kick!
    }
}

Key Takeaway:

  • Interfaces are like rules that classes must follow.

  • One class can implement multiple interfaces!

  • They help make your code flexible and reusable.


5. Default and Functional Methods in Interfaces

Default Methods in Interfaces (Java 8+)

Before Java 8, interfaces could only have method signatures, but now they can also have default methods (methods with a body).

Example:

interface Device {
    void powerOn();

    default void showBrand() {
        System.out.println("This is a generic device.");
    }
}

class Smartphone implements Device {
    public void powerOn() {
        System.out.println("Smartphone is turning on.");
    }
}

public class DefaultMethodExample {
    public static void main(String[] args) {
        Smartphone phone = new Smartphone();
        phone.powerOn(); // Output: Smartphone is turning on.
        phone.showBrand(); // Output: This is a generic device.
    }
}

Key Takeaway:

  • Default methods allow interfaces to evolve without breaking older implementations.

  • They let you add functionality while keeping existing code intact.

Functional Interfaces and Lambda Expressions

Functional interfaces have just one abstract method and are often used with lambda expressions for short and simple code.

Example:

@FunctionalInterface
interface Greeting {
    void sayHello();
}

public class LambdaExample {
    public static void main(String[] args) {
        Greeting greet = () -> System.out.println("Hello, Friend!");
        greet.sayHello(); // Output: Hello, Friend!
    }
}

Key Takeaway:

  • Functional interfaces have exactly one abstract method.

  • Lambda expressions make code shorter and cleaner.


Conclusion

Java’s OOP concepts make it easy to write clean and flexible code. Here’s what we covered:

  • Static Members: Think of them as a shared scoreboard.

  • Abstraction: Hides details like a TV remote.

  • Abstract Classes: A blueprint for subclasses.

  • Interfaces: Contracts that classes must follow.

  • Default & Functional Methods: Make interfaces more powerful.

Hope this helped, buddy! Keep coding and experimenting, and soon, you’ll be a Java pro! šŸš€

More from this blog

U

UniGeek

29 posts

Unigeek empowers developers and tech enthusiasts at every level. From placement prep and daily coding challenges to advanced upskilling, Unigeek helps you grow in the ever-evolving tech world.