DEV Community

Cover image for Inheritance and Polymorphism in Java: Using Superclasses and Subclasses
Alex Ricciardi
Alex Ricciardi

Posted on • Originally published at Medium

Inheritance and Polymorphism in Java: Using Superclasses and Subclasses

This article explains how Java’s inheritance has an “is-a” relationship between superclasses and subclasses, allowing subclasses to inherit and customize superclass functionality. By using polymorphism, subclasses can define unique behaviors, allowing code reuse and flexibility in object-oriented programming.


In Java, the relationship between super-classes (parent class) and subclasses (child class or derived class) in inheritance is a is-a relationship implying that the subclass is a specialized version of the superclass inheriting the functionality (restrictions can be applied) of a class that it is derived from (CSU Global, n.d). In other words, if class B inherits from class A, then class B “is a” type of class A. This relationship allows class B to use all the functionalities (restrictions can be applied) provided by class A, while also adding its own specific functionalities or/and by overriding some or all of the functionalities of class A. The ability of the child class to override functionality is a form of polymorphism.

“The dictionary definition of polymorphism refers to a principle in biology in which an organism or species can have many different forms or stages. This principle can also be applied to object-oriented programming and languages like the Java language. Subclasses of a class can define their own unique behaviors and yet share some of the same functionality of the parent class” (The Java™ Tutorials, n.d.)This is especially beneficial when dealing with multiple objects from different subclasses that share a common superclass type.

For example: dogs, cats, and owls are animals:

Superclass

public class Animal {
    public void makeSound() {
        System.out.println("Makes a Sound");
    }
}
Enter fullscreen mode Exit fullscreen mode

Subclass of Animals

public class Domesticated extends Animal {
    public void friendly() {
        System.out.println("This animal is friendly.");
    }
}
Enter fullscreen mode Exit fullscreen mode

Subclass of Domesticated

public class Undomesticated extends Animal {
    public void notFriendly() {
        System.out.println("This animal is not friendly.");
    }
}
Enter fullscreen mode Exit fullscreen mode

Subclass of Domesticated

public class Cat extends Domesticated {
    @Override
    public void makeSound() {
        System.out.println("Meow");
    }
}
Enter fullscreen mode Exit fullscreen mode

Subclass of Undomesticated

public class Owl extends Undomesticated {
    @Override
    public void makeSound() {
        System.out.println("Hoots");
    }
}
Enter fullscreen mode Exit fullscreen mode

Main class to output the result

public class inheritanceExample {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        Cat myCat = new Cat();
        Owl redOwl = new Owl();

        System.out.println("MY Dog:");
        myDog.makeSound(); // Outputs: Bark
        myDog.friendly();  // Outputs: This animal is friendly.
        System.out.println();

        System.out.println("My Cat:");
        myCat.makeSound(); // Outputs: Meow
        myCat.friendly();  // Outputs: This animal is friendly.
        System.out.println();

        System.out.println("Red Owl:");
        redOwl.makeSound(); // Outputs: Hoot
        redOwl.notFriendly(); // Outputs: This animal is not friendly.
     }
}
Enter fullscreen mode Exit fullscreen mode

Note: The makeSound() methods in the Dog and Cat classes override the makeSound() method in the Animal class.

Additionally, the Dog class is a subclass of the Domesticated class which is a subclass of the Animal class.

Child of ‘→’
Child Of

In Java, a subclass can only have one superclass, for example, the Dog class cannot have a superclass Domesticated and a superclass Animal, the following is not allowed.
only have one superclass

In other words, a subclass can only have one superclass, … and they are not allowed to have multiple parents, grandparents, or great-grandparents.
subclass can only have one superclass

In conclusion, Java’s inheritance allows subclasses to utilize and extend the functionality of superclasses, embodying the “is-a” relationship and facilitating polymorphism. This enhances code reusability, flexibility, and consistency by enabling specific behaviors in subclasses while maintaining shared characteristics across a common superclass.


References:

CUS Global (n.d.). Module 1: Working with inheritance [Interactive lecture]. In Colorado State University Global, CSC372: Programming II, Computer Science Department. Canvas. Retrieved June 8, 2024, from https://csuglobal.instructure.com/courses/94948/pages/module-1-overview?module_item_id=4868813

The Java™ Tutorials (n.d.). Learning the Java language: Interfaces and inheritance. Oracle. Retrieved June 8, 2024, fromhttps://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html


Originally published at Alex.omegapy on Medium published by Level UP Coding on November 1, 2024.

Top comments (0)