Sto leggendo il primo capitolo del libro Gof . La sezione 1.6 discute sull'ereditarietà della classe vs dell'interfaccia:
Ereditarietà della classe contro l'interfaccia
It's important to understand the difference between an object's class and its type. An object's class defines how the object is implemented.The class defines the object's internal state and the implementation of its operations.In contrast,an object's type only refers to its interface--the set of requests on which it can respond. An object can have many types, and objects of different classes can have the same type.
Of course, there's a close relationship between class and type. Because a class defines the operations an object can perform, it also defines the object's type . When we say that an object is an instance of a class, we imply that the object supports the interface defined by the class.
Languages like c++ and Eiffel use classes to specify both an object's type and its implementation. Smalltalk programs do not declare the types of variables; consequently,the compiler does not check that the types of objects assigned to a variable are subtypes of the variable's type. Sending a message requires checking that the class of the receiver implements the message, but it doesn't require checking that the receiver is an instance of a particular class.
It's also important to understand the difference between class inheritance and interface inheritance (or subtyping). Class inheritance defines an object's implementation in terms of another object's implementation. In short, it's a mechanism for code and representation sharing. In contrast,interface inheritance(or subtyping) describes when an object can be used in place of another.
Ho familiarità con il linguaggio di programmazione Java e JavaScript e non ho familiarità con C ++ o Smalltalk o Eiffel come menzionato qui. Quindi sto cercando di mappare i concetti discussi qui sul modo di fare classi, ereditarietà e interfacce di Java.
Ecco come penso a questi concetti in Java:
In Java una classe è sempre un progetto per gli oggetti che produce e quale interfaccia (come in "insieme di tutte le possibili richieste a cui l'oggetto può rispondere") un oggetto di quella classe in possesso è definito durante la fase di compilazione solo perché il la classe dell'oggetto avrebbe implementato quelle interfacce. Le richieste a cui un oggetto di quella classe può rispondere è l'insieme di tutti i metodi presenti nella classe (compresi quelli implementati per le interfacce implementate da questa classe).
Le mie domande specifiche sono:
- Ho ragione nel dire che il modo in cui Java è più simile a C ++ come descritto nel terzo paragrafo.
- Non capisco cosa si intende per ereditarietà dell'interfaccia nell'ultimo paragrafo. Nell'ereditarietà dell'interfaccia Java è presente un'interfaccia che si estende da un'altra interfaccia. Ma penso che la parola interfaccia abbia qualche altro significato sovraccarico qui. Qualcuno può fornire un esempio in Java di cosa si intende per ereditarietà dell'interfaccia, in modo da comprenderlo meglio?