Understanding Method Overriding in Java

2 minute read

Method overriding is a fundamental concept in object-oriented programming (OOP) that allows a subclass to provide a specific implementation of a method that is already defined in its superclass. It enables subclasses to customize or extend the behavior of inherited methods, promoting code reusability and flexibility. In this tutorial, we’ll explore method overriding in Java, its syntax, rules, and provide examples to illustrate its usage.

Understanding Method Overriding

Method overriding occurs when a subclass provides its own implementation for a method that is already defined in its superclass. The method signature (name, parameters, and return type) in the subclass must exactly match the method signature in the superclass. This allows the subclass to provide a specialized implementation of the method while maintaining the same interface as the superclass.

Syntax of Method Overriding

The syntax for method overriding in Java is as follows:

class Superclass {
    returnType methodName(parameters) {
        // Method implementation

class Subclass extends Superclass {
    returnType methodName(parameters) {
        // Specific implementation in subclass

Rules for Method Overriding

When overriding a method in Java, it’s essential to follow these rules:

  1. The method in the subclass must have the same name, parameters, and return type as the method in the superclass.
  2. The access level of the overriding method cannot be more restrictive than the access level of the overridden method. (e.g., a public method in the superclass cannot be overridden with a private method in the subclass).
  3. The overriding method cannot throw a checked exception that is broader than the exception thrown by the overridden method. However, it can throw a narrower or unchecked exception.
  4. Constructors and static methods cannot be overridden in Java.

Example Illustration of Method Overriding

Let’s illustrate method overriding with an example in Java:

// Superclass
class Animal {
    void makeSound() {
        System.out.println("Some sound");

// Subclass overriding the makeSound() method
class Dog extends Animal {
    void makeSound() {

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound(); // Output: Woof

In this example:

  • We have a superclass Animal with a method makeSound().
  • The subclass Dog extends Animal and provides its own implementation of the makeSound() method.
  • When dog.makeSound() is called, it invokes the makeSound() method overridden in the Dog class, producing the output “Woof”.

Benefits of Method Overriding

  1. Customization: Method overriding allows subclasses to customize the behavior inherited from their superclass, enabling finer control over class functionality.
  2. Flexibility: It enhances code flexibility by providing a mechanism to modify or extend the behavior of inherited methods without modifying the superclass.
  3. Polymorphism: Method overriding facilitates polymorphism, allowing objects of different subclasses to be treated uniformly based on their common superclass.


In conclusion, method overriding is a powerful mechanism in Java that enables subclasses to provide specialized implementations of methods inherited from their superclass. By adhering to the rules and syntax of method overriding, developers can enhance code reusability, flexibility, and achieve polymorphic behavior, contributing to the development of robust and maintainable Java applications.