DEV Community

Sreeharsha
Sreeharsha

Posted on

Unlocking Code Reusability and Flexibility with Upcasting in Java

In Java programming, upcasting might seem like a cryptic concept, but its practical benefits are immense. Let's cut through the jargon and explore how upcasting can supercharge your code.

What is Upcasting?

Upcasting allows you to treat a subclass instance as its superclass during compile-time, while preserving its true identity during runtime. Imagine you have a superclass Noodle and a subclass BiangBiang:

class Noodle {
  protected double lengthInCentimeters;
  protected double widthInCentimeters;
  protected String shape;
  protected String ingredients;
  protected String texture = "brittle";

  Noodle(double lenInCent, double wthInCent, String shp, String ingr) {
    this.lengthInCentimeters = lenInCent;
    this.widthInCentimeters = wthInCent;
    this.shape = shp;
    this.ingredients = ingr;
  }

  public void cook() {
    this.texture = "cooked";
  }
}
Enter fullscreen mode Exit fullscreen mode
class BiangBiang extends Noodle {
  BiangBiang() {
    super(50.0, 5.0, "flat", "high-gluten flour, salt, water");
  }
}
Enter fullscreen mode Exit fullscreen mode
class Dinner {
  private void makeNoodles(Noodle noodle, String sauce) {
    noodle.cook();
    System.out.println("Mixing " + noodle.texture + " noodles made from " + noodle.ingredients + " with " + sauce + ".");
    System.out.println("Dinner is served!"); 
  }

  public static void main(String[] args) {
    Dinner noodlesDinner = new Dinner();
    Noodle myNoodle = new BiangBiang();
    noodlesDinner.makeNoodles(myNoodle, "soy sauce and chili oil");
  }
}
Enter fullscreen mode Exit fullscreen mode

Focus on this particular line:

Noodle myNoodle = new BiangBiang();
Enter fullscreen mode Exit fullscreen mode

Here, myNoodle is recognized as a Noodle by the compiler, even though it's a BiangBiang at runtime. This allows us to tap into Noodle-specific features while enjoying the specialized behavior of BiangBiang.

For example, in Dinner class, the makeNoodles() method is called with the BiangBiang object and a sauce as arguments, resulting in the preparation of BiangBiang noodles for dinner.

Why Does it Matter?

1. Boosts Code Reusability: With upcasting, you can use methods designed for the superclass (Noodle) with its subclasses (BiangBiang). No need to duplicate code or create separate methods for each subclass. It's a time-saver and keeps your codebase tidy.

2. Enhances Flexibility: By focusing on coding with superclasses, you gain the freedom to tweak functionality without affecting subclasses. Want to upgrade Noodle behavior? No problem. It won't impact BiangBiang or other subclasses. It's coding agility at its finest.

In Summary

Upcasting is not just another OOP concept; it's a game-changer. It empowers developers to write cleaner, more adaptable code while minimizing redundancy. Look to embrace upcasting, and watch your codebase become more efficient and maintainable.

Credits

Dinner, Noodle, BiangBiang code from codecademy.

Whoever thought about the idea of upcasting is a genius!

Top comments (1)

Collapse
 
efekeremaydin profile image
efekeremaydin

Great concise article