Nel definire la gerarchia, in primo luogo , si può pensare di incorporare il metodo astratto (comportamento) in abstract class
solo perché la classe derivata concreta possiede quel comportamento come comportamento di base con la sua specifica implementazione, < strong> in secondo luogo , si può pensare di incorporare il metodo astratto (comportamento) in interface
solo perché la classe concreta derivata possiede quel comportamento come comportamento non-core (periferico) con la sua implementazione specifica.
Poiché non fare affidamento su questo esempio che supporta il punto precedente, di seguito sono riportati i due riferimenti, su cui fare affidamento .
1) Primo riferimento che supporta questo punto:
Interfaces are ideal for defining mixins. Loosely speaking, a mixin is a type that a class can implement in addition to its "primary type" to declare that it provides some optional behavior. For example,
Comparable
is a mixing interface that allows a class to declare that its instances are ordered with respect to other mutually comparable objects. Such an interface is called a mixin because it allows the optional functionality to be "mixed in" to the type's primary functionality. Abstract classes can't be sued to define mixins for the same reason that they can't be retrofitted onto existing classes: a class cannot have more than one parent, and there is no reasonable place in the class hierarchy to insert a mixin.
2) Secondo riferimento che supporta questo punto :
Nello schizzo UML, la relazione tra interface
model e concrete class
model è denominata Realisation
, dove as, la relazione tra abstract class
model e concrete class
model è denominata is-a
relation. Qui può essere detto is-a
, quando class
concreto ha un comportamento di base diverso dalla relazione realisation
.
Quindi, con questi due riferimenti, sembra list<E>
e Collection<E>
sono abstract class
ma non interface
.
Con questa spiegazione sopra, mi piacerebbe capire,
Perché Collection<E>
e List<E>
è progettato per essere interface
in java.util
pacchetto?
La mia comprensione è corretta?