Mettiamo caso che io ho un interfaccia che si chiama "Item" con dentro le operazioni setName() e getName().

Ora a questo punto, l'intefaccia l'unica nota positiva che ha è che poi posso implementare più tipi diversi di item assicurandomi che almeno quei due metodi avranno lo stesso prototipo. Quindi io potrei farmi un DiscreteItem ed un ContinuousItem che sono due classi che implementano quell'interfaccia e l'unica cosa che fa quell'interfaccia è vincolarmi a implementare quei metodi utilizzando sostanzialmente lo stesos numero e tipo di parametri e valori di ritorno. Ma non potrò mai dire che il metodo xyz richiede come parametro un interfaccia, oppure si?

Cioè potro avere il metodo xyz(Item mioitem) ? ed in quel caso come funzionerebbe la cosa? potrei passargli un Discreteitem, che ha implementato tutti e due i metodi, e tutto funzionerebbe, o sto facendo confusione?

Invece se parliamo di classe astratte, e non di interfacce, quindi mettiamo caso che abbiamo sempre Item, e solo che il metodo "setName()" lo implementiamo già ma il metodo "getName()" invece lo lasciamo da implementare. La cosa come cambia? in questo caso potrò avere un metodo che mi prende un item come parametro?

Vi ringrazio in anticipo,
Neptune.