Skip to main content

Understanding Inheritance in Java

 


Inheritance is one of the fundamental concepts of Object-Oriented Programming (OOP) in Java. It allows a new class (child or subclass) to inherit the properties and behaviors (fields and methods) of an existing class (parent or superclass). This promotes code reuse and establishes a natural hierarchical relationship between classes.

Types of Inheritance in Java

  1. Single Inheritance: A class inherits from one superclass.
  2. Multilevel Inheritance: A class inherits from another class, which in turn inherits from another class.
  3. Hierarchical Inheritance: Multiple classes inherit from one superclass.

    Note: Java does not support multiple inheritance (a class inheriting from more than one class) directly to avoid complexity and ambiguity. However, it can be achieved using interfaces.

Examples of Inheritance

Single Inheritance

In single inheritance, a class inherits from one superclass.

// Parent class class Vehicle { String brand = "Ford"; void honk() { System.out.println("Beep! Beep!"); } } // Child class class Car extends Vehicle { String model = "Mustang"; void display() { System.out.println("Brand: " + brand + ", Model: " + model); } public static void main(String[] args) { Car car = new Car(); car.honk(); // Output: Beep! Beep! car.display(); // Output: Brand: Ford, Model: Mustang } }

Multilevel Inheritance

In multilevel inheritance, a class inherits from another class, which in turn inherits from another class.

Example:

// Base class class Animal { void eat() { System.out.println("Eating..."); } } // Derived class class Dog extends Animal { void bark() { System.out.println("Barking..."); } } // Further derived class class Puppy extends Dog { void weep() { System.out.println("Weeping..."); } public static void main(String[] args) { Puppy puppy = new Puppy(); puppy.eat(); // Output: Eating... puppy.bark(); // Output: Barking... puppy.weep(); // Output: Weeping... } }

Hierarchical Inheritance

In hierarchical inheritance, multiple classes inherit from one superclass.

Example:

// Superclass class Animal { void eat() { System.out.println("Eating..."); } } // Subclass 1 class Dog extends Animal { void bark() { System.out.println("Barking..."); } } // Subclass 2 class Cat extends Animal { void meow() { System.out.println("Meowing..."); } public static void main(String[] args) { Dog dog = new Dog(); Cat cat = new Cat(); dog.eat(); // Output: Eating... dog.bark(); // Output: Barking... cat.eat(); // Output: Eating... cat.meow(); // Output: Meowing... } }

Method Overriding in Inheritance

Method overriding occurs when a subclass provides a specific implementation for a method already defined in its superclass. The subclass method should have the same name, return type, and parameters.

Example:

class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Dog barks"); } public static void main(String[] args) { Animal animal = new Dog(); animal.sound(); // Output: Dog barks } }

The super Keyword

The super keyword in Java is used to refer to the immediate parent class object. It can be used to access parent class methods, constructors, and fields.

Example:

class Animal { String color = "white"; void eat() { System.out.println("Animal is eating"); } } class Dog extends Animal { String color = "black"; void displayColor() { System.out.println("Dog color: " + color); // Output: black System.out.println("Animal color: " + super.color); // Output: white } @Override void eat() { super.eat(); // Calling parent class method System.out.println("Dog is eating"); } public static void main(String[] args) { Dog dog = new Dog(); dog.displayColor(); dog.eat(); // Output: // Animal is eating // Dog is eating } }

Constructor Chaining

Constructor chaining refers to the process of calling one constructor from another constructor using the this() or super() keywords.

Example:

class Animal { Animal() { System.out.println("Animal is created"); } } class Dog extends Animal { Dog() { super(); // Calls the parent class constructor System.out.println("Dog is created"); } public static void main(String[] args) { Dog dog = new Dog(); // Output: // Animal is created // Dog is created } }

Comments

Popular posts from this blog

OSPF Configuration

Configuring OSPF  Step 1: Enter Configuration Mode Router>   enable Router#  configure terminal Step 2: Enable OSPF Enable OSPF with a process ID. The process ID is locally significant and can be any number. Router(config)# router ospf <process-Id> Step 3: Set the OSPF Router ID Setting a unique OSPF Router ID is optional but recommended for stability and troubleshooting. The Router ID should be a unique IPv4 address within the OSPF domain. Router(config-router)# router-id <router-id> Step 4: Define Networks to Include in OSPF Specify which networks will participate in OSPF and their corresponding areas. Ensure the areas match across all routers in the OSPF domain. Router(config-router)# network <network-address> <wildcard-mask> area <area-id> Step 5: Save the configuration Router(config-router)# exit Router(config)# do write / do wr Verification Commands View OSPF Neighbors show ospf neighbor View the OSPF Routing Table show ip route ospf View OSPF Pro

Java Overview

What is Java?  Java is a popular programming language for developing web, mobile, and desktop applications. It is a high-level and object-oriented programming language. It is platform-independent. It required the Java Virtual Machine(JVM) to run the Java code. Java is similar to C/C++. Application of Java Mobile Application Desktop Application Web Application Embedded System Smart Card Payment System Games History of Java Java's history dates back to the early 1990s when a group of researchers at Sun Microsystems led by James Gosling started a "green project". The goal of this project was to create a portable home-appliance software that could run on embedded processor chips. Initially, the team planned to use C++ programming language for this project. However, they encountered portability issues with C++ and decided to develop a new programming language from scratch. This led to the creation of the Oak programming language, named after an oak tree outside Gosling's o

Configuring Static NAT for Any Network Scenario

Introduction Network Address Translation (NAT) is a fundamental technique used in networking to translate private IP addresses to public IP addresses and vice versa. Static NAT is a method where a specific private IP address is mapped to a specific public IP address.  Configuration Steps Router Configuration Enable NAT Service Router(config)# ip nat inside source static [inside-local] [inside-global] Replace [inside-local] with the private IP address to be translated. Replace [inside-global] with the public IP address to translate to. Configure Interfaces Router(config)# interface [inside-interface] Router(config-if)# ip address [inside-ip-address] [subnet-mask] Router(config-if)# ip nat inside Router(config-if)# no shutdown Router(config-if)# exit Router(config)# interface [outside-interface] Router(config-if)# ip address [outside-ip-address] [subnet-mask] Router(config-if)# ip nat outside Router(config-if)# no shutdown Router(config-if)# exit Replace [inside-interface]