Method Overriding in Java

Method Overriding in Java

Lesson 20: Method Overriding

 

Method overriding is a powerful feature of Java that allows a subclass to provide a specific implementation of a method that is already provided by one of its superclasses. This enables polymorphism, where a single interface can represent multiple underlying implementations.

 

 Key Points:

  • Inheritance: Method overriding is closely tied to inheritance, where subclasses inherit methods from their superclasses.
  • Signature Match: To override a method, the subclass method must have the same signature (name, parameters, and return type) as the superclass method.
  • @Override Annotation: It's a good practice to use the `@Override` annotation when overriding methods to ensure that the method signature matches the superclass method.

 

Let's illustrate method overriding with a simple example:

 

```java

class Animal {

    void makeSound() {

        System.out.println("Some sound");

    }

}

 

class Dog extends Animal {

    @Override

    void makeSound() {

        System.out.println("Bark");

    }

}

```

 

In this example, the `Dog` class overrides the `makeSound()` method of its superclass `Animal` to provide a specific implementation for a dog's sound.

 

 Lesson 21: Message Passing

 

Message passing is a fundamental concept in object-oriented programming, where objects communicate by sending and receiving messages. In Java, message passing is achieved through method invocation.

 

 Key Points:

  • Objects Communicate: In Java, objects interact with each other by invoking methods on one another.
  • Encapsulation: Message passing promotes encapsulation by allowing objects to interact with each other through well-defined interfaces, hiding their internal implementation details.
  • Dynamic Binding: Java's dynamic method dispatch ensures that the correct version of an overridden method is called at runtime based on the type of the object.

 

Let's consider an example of message passing:

 

```java

class Person {

    void greet() {

        System.out.println("Hello!");

    }

}

 

class Guest extends Person {

    @Override

    void greet() {

        System.out.println("Welcome!");

    }

}

 

public class MessagePassingExample {

    public static void main(String[] args) {

        Person person = new Guest();

        person.greet(); // Output: Welcome!

    }

}

```

 

In this example, the `greet()` method of the `Guest` class is invoked through a reference of the `Person` class, demonstrating dynamic method dispatch and polymorphism.

 

 Lesson 22: Super Keyword

 

 

The `super` keyword in Java is used to refer to the superclass of the current object. It has several important uses, including invoking superclass constructors, methods, and accessing superclass variables.

 

 Key Points:

 

  • Invoking Superclass Constructor: `super()` is used to invoke the constructor of the superclass from the subclass constructor.
  • Accessing Superclass Methods: `super.method()` is used to invoke a method from the superclass when it's overridden in the subclass.
  • Accessing Superclass Variables: `super.variable` is used to access a variable from the superclass when it's hidden by a variable in the subclass.

 

Let's explore the usage of the `super` keyword with an example:

 

```java

class Vehicle {

    int maxSpeed = 100;

    

    void display() {

        System.out.println("Maximum Speed: " + maxSpeed);

    }

}

 

class Car extends Vehicle {

    int maxSpeed = 120;

    

    void display() {

        super.display(); // Invoke superclass method

        System.out.println("Maximum Speed of Car: " + maxSpeed);

    }

}

 

public class SuperKeywordExample {

    public static void main(String[] args) {

        Car car = new Car();

        car.display();

    }

}

```

 

In this example, the `Car` class overrides the `display()` method of its superclass `Vehicle` and uses the `super` keyword to invoke the superclass method while accessing the hidden `maxSpeed` variable.

 

Conclusion

Method overriding, message passing, and the `super` keyword are essential concepts in Java programming, enabling developers to create flexible, modular, and maintainable code. By mastering these concepts, you'll be well-equipped to design elegant and efficient Java applications. Keep practicing and exploring the vast world of Java programming!