2015-04-16 28 views
6

Stavo passando per i concetti di astrazione in Java.Vantaggi dell'astrazione e del polimorfismo in Java

Queste sono le mie comprensioni:

  1. L'astrazione è il metodo di presentare la firma di funzioni e nascondere l'implementazione, lasciando agli utenti che possono implementare/estendere la classe di interfaccia/astratta.
  2. In questo modo possiamo ottenere maggiori possibilità di modifica del codice, riutilizzabilità.
  3. Possiamo strettamente correlare gli oggetti in tempo reale agli oggetti nel codice del programma.

sono queste le mie domande:

  1. Quando una classe astratta può comportarsi come un'interfaccia in cui tutti i metodi sono fatti astratto, perché abbiamo bisogno di interfacciarsi separatamente? Si prega di spiegare con un esempio per una migliore comprensione.

  2. Possiamo probabilmente chiamare Classe astratta = Interfaccia + Eredità su una base di funzionalità? Perché possiamo ottenere la funzionalità dell'interfaccia e dell'eredità insieme alla classe Abstract.

+0

Questa domanda dovrebbe rispondere alle tue domande: http://stackoverflow.com/questions/1913098/what-is-the-difference-between-an-interface-and-abstract-class –

+0

Ed ecco una risposta al perché è stata presa la decisione di non consentire più l'ereditarietà dell'implementazione in java: http://stackoverflow.com/questions/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c – jrahhali

risposta

2

Semplicemente dicendo: l'interfaccia è un contratto, la classe astratta è l'implementazione dello scheletro. (Inoltre, in Java interfacce vengono per lo più utilizzati perché non è possibile estendere più classi.)

contratto dice quello, implementazione dice come.

Esempio di interfaccia:java.util.List. Ha tutti i metodi che ogni lista dovrebbe avere: add(), size(), indexOf() e così via.

Esempio di classe astratta:java.util.AbstractList. Sebbene abbia molti metodi astratti, alcuni metodi List, che non dipendono dal modo in cui gli elementi sono memorizzati nell'elenco concreto, vengono implementati lì (addAll(), equals(), toString() e altri). Per creare un'implementazione completa, non tutti i metodi devono essere implementati, rendendo così il lavoro di implementor più facile.