Perché il compilatore dare un messaggio di errore quando si riduce la visibilità di un metodo, mentre l'override nella sottoclasse?Perché non si può ridurre la visibilità di un metodo in una sottoclasse Java?
risposta
Perché ogni istanza della sottoclasse deve ancora essere un'istanza valida della classe di base (vedi Liskov substitution principle).
Se la sottoclasse improvvisamente ha perso una proprietà della classe base (vale a dire un metodo pubblico per esempio), allora sarebbe più un valido sostituto per la classe di base.
Perché sottotipi devono essere utilizzabile come esempi di loro supertipo.
Perché se questo è stato permesso, la seguente situazione sarebbe possibile:
Class Sub eredita dalla classe padre. Il genitore ha un metodo pubblico foo
, Sub lo rende privato. Ora il seguente codice compilato bene, perché il tipo dichiarato di bar
è genitore:
Parent bar = new Sub();
bar.foo();
Tuttavia non è chiaro come questo si deve comportare. Una possibilità sarebbe lasciare che causi un errore di runtime. Un altro sarebbe semplicemente permetterlo, il che renderebbe possibile chiamare un metodo privato dall'esterno, semplicemente lanciando la classe genitore. Nessuna di queste alternative è accettabile, quindi non è consentita.
- 1. Java, non può ridurre la visibilità del metodo ereditato dall'oggetto
- 2. non può ridurre la visibilità del metodo di metodo ereditato dal genitore
- 3. significato di "non può ridurre la visibilità del metodo ereditato" con un'interfaccia
- 4. Perché la visibilità del pacchetto ha la precedenza sulla visibilità della sottoclasse?
- 5. Chiamare un metodo di sottoclasse in Java
- 6. Perché non si può chiamare un metodo su un puntatore nullo in Java?
- 7. In Java, cosa succede quando si ha un metodo con una parola chiave di visibilità non specificata?
- 8. Java: sostituendo una sottoclasse/sottotipo di un parametro quando si sostituisce un metodo?
- 9. Il sovraccarico di un metodo in una sottoclasse in C++
- 10. accesso negato durante la chiamata metodo java sottoclasse metodo
- 11. Perché è necessario un combinatore per ridurre il metodo che converte il tipo in java 8
- 12. Java: chiamando un metodo protetto di super classe da una sottoclasse - non visibile?
- 13. Java non può accedere proprietà di classe superiore nel metodo ridefinito di sottoclasse
- 14. come si può ridurre la larghezza della casella di testo?
- 15. Perché il metodo protetto non è accessibile dalla sottoclasse?
- 16. Un oggetto di una sottoclasse può accedere a un campo protetto di un altro oggetto di un'altra sottoclasse?
- 17. Perché si dichiara un metodo di interfaccia Java astratto?
- 18. Java Opzionale perché non un metodo ifNotPresent?
- 19. In Java, perché si asserisce una parola chiave e non un metodo?
- 20. Posso creare un metodo con accesso protetto Java in Scala?
- 21. Java - creazione dinamica di una sottoclasse
- 22. Differenza di firma quando si nasconde il metodo statico in una sottoclasse
- 23. Perché non è consentito restringere l'ambito di un metodo mentre si esegue l'override di
- 24. Chiamare la superclasse da un costruttore sottoclasse in Java
- 25. Java chiamando il metodo della sottoclasse quando si cerca di utilizzare genitore metodo di classe
- 26. Perché la chiamata al metodo genitore di questa sottoclasse non è polimorfica?
- 27. Come si può ridurre il ritardo del TypeText in Watin?
- 28. Perché non si può inizializzare una matrice vuota in Swift?
- 29. Perché il metodo della sottoclasse non viene chiamato?
- 30. Java classe interna visibilità di puzzle
Ma perché siamo non posso accedere a sovrascrivere un metodo protetto e modificarlo a privati? Poiché l'interfaccia pubblica è sempre la stessa, non interrompe LSP in questo modo. – Pacerier
L'interfaccia pubblica non cambia, ma la protetta lo fa. Il codice nella classe genitore non può accedere ai metodi della propria carne e sangue :( – Elazar