1. Single Inheritance:
- This is the most basic and commonly used type of inheritance where a subclass inherits properties and methods from one parent class.
- Subclass gains access to parent class’s non-private members (methods and fields).
- Subclass can override inherited methods to provide specialized behavior.
- Example: A
Car
class inheriting from aVehicle
class, gaining access to general vehicle properties like color and mileage while having its own specific features like engine type and number of doors.
2. Multiple Inheritance (Not supported directly):
- Java doesn’t directly support multiple inheritance due to potential ambiguity issues.
- However, it can be achieved using interfaces which allow a class to implement multiple interfaces, essentially inheriting their methods.
- Each interface defines methods the implementing class must implement.
- Example: A
SportsCar
class implementing bothVehicle
andLuxuryCar
interfaces, inheriting methods from both while providing its own specific implementation.
3. Multilevel Inheritance:
- A subclass inherits from a parent class, which itself inherits from another parent class, forming a chain of inheritance.
- Each subclass inherits properties and methods from all its ancestors in the chain.
- Example: A
LuxurySUV
class inheriting fromSportsCar
which inherited fromVehicle
.
4. Hybrid Inheritance:
- Not a single type of inheritance, but rather a combination of the above types.
- Can involve single, multiple (through interfaces), and multilevel inheritance combined within a class hierarchy.
- Example: A
SelfDrivingLuxurySUV
class inheriting fromLuxurySUV
which inherits fromSportsCar
andVehicle
, while also implementing anAutonomousDriving
interface for self-driving functionality.
Choosing the Right Type:
- Single inheritance is simplest and most common.
- Use multiple inheritance (through interfaces) cautiously to avoid complexity and ambiguity.
- Multilevel inheritance can be useful for specific scenarios but can also lead to complex class hierarchies.
- Hybrid inheritance should be used carefully and thoughtfully due to potential complexity.
Remember: Understanding the different types of inheritance and their implications is crucial for designing efficient and maintainable object-oriented programs in Java.