Questo è uno dei motivi principali che si usa l'ereditarietà. Trattate la SuperClass come un'astrazione e al momento della compilazione non è necessario conoscere il tipo derivato, o un'altra classe non ha bisogno di conoscere il tipo derivato. Questo ti permette di usare riferimenti a SuperClass mentre usi il polimorfismo per chiamare i metodi della classe derivata.
Questo vi permette di
a.) Creare le fabbriche in modo che non è necessario conoscere il tipo in fase di compilazione, e si dispone di un metodo di esecuzione che crea i tipi derivati. Pensate a COM, GStreamer, DirectShow, Glib, ecc ...
b.) Nascondi complessità ad altri oggetti esponendo solo i riferimenti di tipo di base anche se sono istanze del tipo derivato. Pensa ai metodi che restituiscono l'oggetto o prendi un riferimento a un oggetto come argomento.
c.) Molte altre possibilità, ma quelle sono probabilmente le due più importanti per voi.
fonte
2012-04-16 16:02:34
La cosa fondamentale è che "Sottoclasse" * è una "SuperClass". –
Questo comportamento è cambiato in Java 8? Ho appena testato il caso in cui un metodo accetta un metodo void del parametro superclass (parametro SuperClass), ma sono in grado di inserire un'istanza di sottoclasse 'SubClass sub = new SubClass();' quando lo chiamo, come nel metodo ' (sub); '. Ciò significa che ora è consentita la compatibilità verso l'alto? –