2011-11-21 9 views
5

Buenos días¿Es posible sobrescribir un miembro privado al crear subclases en C# o Java?

Estoy aprendiendo C# y Java y tengo una pregunta con respecto a la herencia. ¿Es posible anular miembros privados en una superclase (clase base)? En mi opinión, no sería correcto, ya que el modificador de acceso impediría el acceso al miembro.

Lo siento ... espero que la pregunta no sea tonta.

respecto arrianos

+1

No tontas, pero se puede encontrar dentro de cinco segundos, tratando, por lo tanto, tit no tiene sentido preguntar aquí. Ahora, si tiene curiosidad sobre "¿Por qué se define el idioma de esa manera?", Esa es una cuestión diferente ... –

Respuesta

5

Ésta no es pregunta tonta, pero le da otro concepto de ocultar variable.

El campo en Java solo está oculto y no está anulado (esto no significa que obtendremos un error de tiempo de compilación al intentar esto, sino que no se anulan en su verdadero sentido). Reemplazar significa que el miembro debe invocarse en función del tipo de tiempo de ejecución del objeto y no según el tipo declarado. Pero el enlace para los campos en Java siempre es estático y, por lo tanto, se basa solo en el tipo declarado de referencia del objeto. Lea más sobre Enlace estático en el artículo - Enlace dinámico frente a enlace estático >>

En el caso de los métodos, solo se invalidan los métodos que se heredan y, por lo tanto, los métodos estáticos no se anulan sino que solo se ocultan y siguen únicamente la vinculación estática. los miembros privados (métodos o campos ambos) no están ocultos ni anulados. También siguen la vinculación estática y no se puede acceder directamente desde ninguna otra clase (incluidas las subclases) excepto la clase que las tiene. Recuerde, Hidden no significa que no podamos acceder a los miembros de la subclase. Por lo tanto, no confundas con ser no accesible (en el caso de miembros privados - campos o métodos) y estar oculto.

4

private métodos de una clase son no visible en su clase hija para que no se consiguen heredada.

2

Técnicamente, no lo está anulando.

Si una subclase tiene un miembro con un nombre, y la superclase tiene un miembro con el mismo nombre marcado como privado, son dos miembros diferentes.

1

No, no puede anular, en Java o en C#. Puedes hacerlo en C++.

Hay una good website que se puede buscar :)

2

si tanto la superclase como la subclase del mismo paquete pueden anularse los métodos que no están marcados como PRIVADO y FINAL, si están en el paquete diferente, entonces puede anular los métodos que son PÚBLICOS o PROTEGIDOS (También no debe ser FINAL).

3

No, no es posible anular private elementos, que son efectivamente final (porque nunca son visibles a partir de una subclase a ser anulado.)

puede declarar private elementos con el mismo nombre en la subclase , pero eso no reemplaza al de la superclase; es simplemente otro método private con el mismo nombre que el de la superclase.

1

Uso protectedprivated lugar, protegido hacer un método visible sólo para su niño por

+0

¡Es tan simple! – BKSpurgeon

Cuestiones relacionadas