2011-06-13 26 views
5

Disculpa que soy un novato en Java. Estoy tratando de entender las relaciones de herencia y subclase/superclase en Java.¿Qué métodos puede heredar una subclase en Java?

Si la clase A es una subclase de clase B, ¿el protocolo de clase A tendrá todos los métodos que pertenecen a la clase A o solo aquellos declarados públicos y de paquete?

¿Puede el protocolo de la clase A tener métodos privados heredados de su superclase ClassB?

+1

Error común en las respuestas, excepto en las de Bohemia.Incluso los privados ** son heredados ** - simplemente no están ** disponibles ** para el código de la subclase. Pero todavía están allí y funcionan, si se los llama de métodos ancestrales. –

Respuesta

0

ClassA heredará todos los métodos públicos y protegidos de classB. NO incluirá los métodos privados de classB.

+1

¿Qué pasa con la visibilidad predeterminada? – Bohemian

+0

La visibilidad predeterminada es privada. –

+2

la visibilidad predeterminada es (¡sorpresa!) Predeterminado – unbeli

1

Todos los métodos y variables públicos y protegidos serán heredados. Cualquier método con la misma firma en la subclase anulará el comportamiento de la superclase. La subclase no heredará métodos y variables privados. El valor predeterminado (a.k. un nivel de visibilidad del paquete) se heredará si está en el mismo paquete y por subclases.

0

Los métodos privados de ClassB no son visibles para ClassA. Si desea dar acceso a ClassA a los métodos internos de ClassB (sin que esos métodos formen parte de la interfaz pública de ClassB) debe protegerlos en lugar de hacerlo de forma privada.

-1

Los métodos privados no se heredan. Solo los métodos protegidos, públicos y predeterminados se heredan.

Clase A proporcionará los métodos que son públicos tanto en classA y ClassB

+2

¡Incorrecto! El valor predeterminado no es heredado. Cualquier clase del mismo paquete puede ver los métodos de visibilidad predeterminados. Si la subclase está en el mismo paquete, entonces sí, de lo contrario no. – Bohemian

+1

ClassA puede usar los métodos predeterminados de ClassB solo si están en el mismo paquete. –

10

En primer lugar, la palabra "heredó" no es bastante el término correcto. Quieres decir "visible".

  • public y protected son siempre visibles
  • private no es visible
  • por defecto, ("paquete") la visibilidad - es decir, sin visibilidad especificada - sólo es visible si la subclase está en el mismo paquete (como se sean serían para cualquier clase en el mismo paquete)
0

los métodos públicos, etiquetados por public están disponibles para todas las clases. Los métodos protegidos, etiquetados por protected están disponibles para las subclases y las clases amigas, que son clases en el mismo paquete. Los métodos amigables, etiquetados por nada (por ejemplo, por defecto) están disponibles para las clases amigas. Los métodos privados están disponibles solo para la clase en sí.

Los métodos estáticos, etiquetados por static están disponibles sin un objeto para acceder a ellos. Estos son llamados por ClassName.foo(), SuperClassName.foo() (innecesario si no se reemplaza, foo() es aceptable) o ClassName.foo() (innecesario, foo() es aceptable) Dinámico (consulte vocabulario ?? ?) etiquetados por nada (es decir, por defecto) están disponibles solo si uno tiene un objeto de la clase. ex: bar.foo(), this.foo() (innecesario, foo() es aceptable), o super.foo() (innecesario si no se reemplaza, foo() es aceptable) Los métodos reemplazados, anotados por @Override son solo disponible a través de super.foo

Por lo tanto, en una instancia de ClassB, todos los miembros protected y public y los métodos de ClassA serán accesibles. En una llamada estática, solo se puede acceder a los métodos estáticos.

Cuestiones relacionadas