Esa es una de las principales razones por las que utilizar la herencia. Tratas a la Superclase como una abstracción y, en tiempo de compilación, no necesitas conocer el tipo derivado, o no es necesario que otra clase conozca el tipo derivado. Esto le permite usar referencias a SuperClass mientras usa polimorfismo para llamar a los métodos de la clase derivada.
Esto le permite a
a.) Crear fábricas de manera que no es necesario conocer el tipo en tiempo de compilación, y usted tiene algún método de ejecución que crea los tipos derivados. Piense en COM, GStreamer, DirectShow, Glib, etc ...
b.) Oculte la complejidad de otros objetos exponiendo únicamente las referencias de tipo base aunque sean instancias del tipo derivado. Piensa en los métodos que devuelven el objeto o toma una referencia de objeto como argumento.
c.) Muchas más posibilidades, pero esas son probablemente las dos más relevantes para usted.
Lo más importante aquí es que 'SubClass' * es * a' SuperClass'. –
¿Cambió este comportamiento en Java 8? Acabo de probar el caso en el que un método adopta un parámetro de superclase 'método de vacío (SuperClass param)' pero puedo poner en una instancia de subclase 'SubClass sub = new SubClass();' cuando lo llamo, como en 'method (sub); '. Esto significa que ahora se permite la compatibilidad ascendente? –