Domanda

Perché il compilatore fornisce un messaggio di errore quando si riduce la visibilità di un metodo mentre lo si sovrascrive nella sottoclasse?

È stato utile?

Soluzione

Perché ogni istanza della sottoclasse deve ancora essere un'istanza valida della classe base (vedi Principio di sostituzione di Liskov ).

Se la sottoclasse improvvisamente ha perso una proprietà della classe base (ad esempio un metodo pubblico), non sarebbe più un sostituto valido per la classe base.

Altri suggerimenti

Perché se ciò fosse consentito, sarebbe possibile la seguente situazione:

La classe Sub eredita dalla classe Parent. Parent ha un metodo pubblico foo , Sub lo rende privato. Ora il seguente codice verrà compilato correttamente, poiché il tipo dichiarato di bar è Parent:

Parent bar = new Sub();
bar.foo();

Tuttavia non è chiaro come dovrebbe comportarsi. Una possibilità potrebbe essere quella di causare un errore di runtime. Un altro sarebbe semplicemente permetterlo, il che renderebbe possibile chiamare un metodo privato dall'esterno, semplicemente trasmettendo alla classe genitore. Nessuna di queste alternative è accettabile, quindi non è consentita.

Perché i sottotipi devono essere utilizzabili come istanze del loro supertipo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top