Большим преимуществом является полиморфизм.Если классы B и C оба наследуются от A, то всякий раз, когда требуется объект типа A, он может быть заменен либо объектом типа B, либо объектом типа C. Предполагая, что соответствующие методы переопределены в B и C, этоочень удобно, чтобы получить различное поведение в зависимости от того, какой объект вы передаете.
Пример:
class A {
public void foo() { System.out.println("A"); }
}
class B extends A {
public void foo() { System.out.println("B"); }
}
class C extends A {
public void foo() { System.out.println("C"); }
}
Тогда:
public static void printMessage(A obj) {
obj.foo();
}
public static void main(String[] args) {
A b = new B();
printMessage(b); // prints 'B'
A c = new C();
printMessage(c); // prints 'C'
}