Rajat's Notes

Personal knowledge based for Tech, Interviews and many more.

This project is maintained by im-Rajat

Interface Segregation Principle

Bad Implementation :

public interface Vehicle {
    void accelerate() {}
    void applyBreaks() {}
    void fly() {}
}

public class Aeroplane implements Vehicle {
    @Override
    public void accelerate() {...}

    @Override
    public void applyBreaks() {...}

    @Override
    public void fly() {...}
}
// Aeroplane implements all methods as it supports all operations

public class Bus implements Vehicle {
    @Override
    public void accelerate() {...}

    @Override
    public void applyBreaks() {...}

    @Override
    public void fly() { 
        // dummy implementation
    }
}
//Here bus provide dummy implementation for fly() method as it didn't support fly

Good Implementation :

public interface Vehicle {
    void accelerate() {}
    void applyBreaks() {}
}

public interface Flyable {
    void fly() {}
}

public class Aeroplane implements Vehicle, Flyable {
    @Override
    public void accelerate() {...}

    @Override
    public void applyBreaks() {...}

    @Override
    public void fly() {...}
}
// Aeroplane class implements both Vehicle and Flyable interface

public class Bus implements Vehicle {
    @Override
    public void accelerate() {...}

    @Override
    public void applyBreaks() {...}
}
// Bus implements only vehicle interface as it didn't support fly()