Da un punto di vista OOP c'è qualche differenza tra una classe derivata e una classe ereditata? O è semplicemente terminologia?OOP Differenza tra una classe derivata e una classe ereditata?
risposta
Quando si utilizza l'ereditarietà, la classe ereditata viene chiamata classe base e la classe ereditaria viene chiamata classe derivata .
Completamente cambiando il testo della tua risposta per rispecchiare la risposta di un altro utente non è considerata una buona forma qui su SO. –
@Neil: al contrario. Modificare la tua risposta per renderla la migliore risposta possibile è ciò che SO è tutto. Ovviamente il plagio non è bello, ma trovo la modifica un miglioramento basato sulla tua risposta, non una copia sfacciata, soprattutto perché la tua risposta era specifica per C++ (non c'era bisogno di renderla specifica, ma l'hai fatto.) –
@Vinko Era necessario renderlo specifico: lingue diverse usano nomenclature diverse. Ad esempio, un programmatore Smalltalk parlerebbe di superclasse e sottoclasse piuttosto che di base e derivate. –
Il termine classe derivata è preferito C++ gergo per una classe che eredita da un'altra classe, che in C++ gergo viene chiamata classe di base. Quindi in C++ i termini che chiedi sono identici.
La risposta di Neil mi ha confuso un po ', quindi ho controllato un po' di public sources.
consideri una classe Base e Sub Class (SubClass extends BaseClass
nella terminologia Java), che
- il Sotto Classe deriva Classe Base (classe secondaria è un classe derivata di Base Class) e
- la Sottoclasse eredita da Classe base (classe base è un/il classe ereditata della classe Sub)
Quindi, a mio parere entrambi i termini definiscono la stessa relazione tra le classi, ma da prospettive diverse.
Il termine sottoclasse non è comunemente usato in C++ - Non so su Java - e l'OP non ha chiesto informazioni a riguardo. –
Ma lui non ha chiesto il C++ neanche ... –
Inheritance terminologia da Bertran Meyer (Object-Oriented Software Construction, p.464):
convenzioni di base e la terminologia
I seguenti termini saranno utili in aggiunta a “erede” e "genitore".
Un discendente di una classe C è qualsiasi classe che eredita direttamente o indirettamente da C, compresi C stessa. (Formalmente: o C o, ricorsivamente, un discendente di un erede di C.) Un antenato di C è una classe Un tale che C è un discendente di A .
In letteratura si incontrano anche i termini “sottoclasse” e “superclasse”, ma ci sarà stare lontano da loro perché sono ambigue; a volte "sottoclasse" significa erede (discendente immediato), a volte è usato nel senso più generale del discendente corretto, e non è sempre chiaro quale. Inoltre, vedremo che la connotazione "sottoinsieme" di questa parola non è sempre giustificata.
forse interessante, se si esegue l'override un metodo, in Delphi si scrive:
inherited; // so "inherited" is the base class
invece di
base.BaseImplementation(); // C#
- 1. Come nascondere una proprietà ereditata in una classe senza modificare la classe ereditata (classe base)?
- 2. Rendere una classe non ereditata
- 3. Differenza tra caricare una classe e istanziarla
- 4. Qual è la differenza tra una classe astratta e un'interfaccia?
- 5. Puntatore della classe base contro il puntatore della classe ereditata?
- 6. Differenza tra classe genitore e super classe
- 7. Qual è la differenza tra una classe e una libreria?
- 8. Come ottenere un'istanza di classe base da una classe derivata
- 9. Creare un oggetto classe base da una classe derivata
- 10. Qual è la differenza tra una classe statica e una classe normale?
- 11. Elimina funzione virtuale da una classe derivata
- 12. Come scoprire se la proprietà è ereditata da una classe base o dichiarata in derivata?
- 13. differenza tra "classe A; classe B" e "classe A :: B"
- 14. Creazione di una classe di proprietà estendibile (OOP)
- 15. Differenza tra una classe e un oggetto in JavaScript
- 16. Classe ereditata dalla classe senza costruttore predefinito
- 17. Uso di "Pubblico" in una dichiarazione di classe derivata?
- 18. È possibile rendere una funzione derivata una classe derivata dichiarando privato costruttore/operatore di copia nella classe base?
- 19. Perché una classe modello derivata non ha accesso agli identificatori di una classe modello di base?
- 20. javascript oop, instanceof e classe base
- 21. Come ereditare pubblicamente da una classe base, ma rendere alcuni metodi pubblici dalla classe base privata nella classe derivata?
- 22. AssemblyInitialize nella classe derivata
- 23. C'è qualche differenza tra tipo e classe?
- 24. astratta classe derivata dalla classe concreta
- 25. C# ereditarietà. classe derivata dalla classe Base
- 26. Impossibile risolvere una classe statica annidata ereditata durante la compilazione
- 27. Come sovrascrivere una proprietà di classe ereditata in C#?
- 28. Objective-C: accesso a proprietà private in una classe ereditata
- 29. JavaScript: l'aggiunta di una classe ereditata all'array non funziona
- 30. Come implementare l'interfaccia IDisposable in una classe ereditata da SocketAsyncEventArgs
duplicato esatto della tua domanda precedente. –
@David - grazie Ok, ho cancellato l'altra domanda, devo aver inviato due volte .... –