il metodo stampa non mi sembra l'esempio più appropriato per il principio, in sostanza dice che chi usa gli oggetti della gerarchia non deve accorgersi della differenza,
ti cito un esempio:
hai una classe IntSet che è un Set di interi con un metodo elements() che restituisce un iteratore agli elementi.
Poi definisci una sottoclasse di IntSet, GigiIntSet, fai l'override di elements() e gli fai restituire un itaratore solo ai numeri dispari del set.
A questo punto NON hai rispettato il principio della liskov, perchè:
a)gli utilizzatori delle tue classi avranno un comportamento inaspettato utilizzando GigiIntSet, pensa ad una funzione che calcola la sommatoria dei set, con GigiIntSet fallisce;
b)in questo modo hai cambiato la proprietà che dice: "elements() restituisce un iteratore agli elementi"
l'esempio l'ho preso dalle dispense che ho di ing. del sw
![]()
riguardo al metodo stampa: lo puoi ridefinire, basta che stampi la cosa che deve stampare (questo dipende da come era nel padre), e non "Cicciocicci è andato al mare".
Spero di aver scritto in italiano,
Ciao!!