2012-07-24 11 views
7

Soy nuevo en Java y tengo una pregunta muy básica.Anulación de métodos protegidos

Tengo 2 clases para padres en el mismo paquete. Animal Clase abstracta y la clase Machine.

Ahora, la clase abstracta Animal tiene un método protegido. Soy consciente de que los métodos protegidos son accesibles si las clases están bajo el mismo paquete.

Puedo acceder a ese método protegido en mi clase Machine, y la pregunta es ... ¿Es posible anular ese método protegido? Sin extender la clase Animal.

+2

¿Intentaste hacerlo? ¿Cuál fue el resultado? –

+0

Anulación viene después de la herencia ... lo que dices no es posible ... :) –

Respuesta

21
  • protegida - puede ser anulado por subclases, tanto si están en el mismo paquete o no
  • por defecto (sin modificador de acceso) - Sólo se puede acceder o anulado si las dos clases están en el mismo paquete
+1

gracias por responder a esta pregunta básica. :) –

+0

esta es la respuesta correcta. Denis Salibio, deberías jugar un poco con la jerarquía de clases. – TecHunter

5

Solo puede sobrescribir los métodos mediante la extensión.

Puede anular un método protegido con una subclase anónima, si lo desea. P.ej.

public class Animal { 

    protected String getSound() { 
     return "(Silence)"; 
    } 

    public void speak() { 
     System.out.println(getSound()); 
    } 
} 

En otra clase:

public static void main(String ... args) { 

    Animal dog = new Animal() { 

     @Override 
     protected String getSound() { 
      return "Woof!"; 
     } 
    } 

    dog.speak(); 
} 

salida será:

Woof! 
+0

Animal animal = nuevo Perro(); Utilicé este código para acceder al método, solo me pregunto si puedo anular el método protegido. –

+0

gracias por responder esta pregunta básica. :) –

+0

He actualizado mi respuesta para mostrar cómo se puede crear una subclase anónima de Animal para representar a un perro, sin crear realmente una clase llamada Perro. –

0

Para sustituir un método hay que extender esa clase. Eso es lo que significa anular: tener un método con la misma firma que la superclase.

+0

gracias por responder esta pregunta básica. :) –

1

No, Overriding significa heredar el comportamiento de la clase principal y eso no es posible sin extender la clase.

public class PClass 
    { 



protected boolean methodA() 
      { 
    return true; 
     } 

    } 

public class CClass extends PClass 
     { 

protected boolean methodA() 
      { 
    return false; 
     } 
     } 

Ejecutar el código siguiente para probarlo

public static void main(String[] args) 
    { 

    PClass pc=new CClass(); 
    System.out.println(pc.methodA()); 

    } 

O/p=false

aquí estamos anulando el comportamiento de methodA

+0

gracias por responder esta pregunta básica. :) –

0

Anulación por definición dice ..

Un ejemplo metho d en una subclase con la misma firma (nombre, más el número y el tipo de sus parámetros) y el tipo de devolución como un método de instancia en la superclase anula el método de la superclase.

Así AFAIK si no extiende la superclase no hay forma de anular el método.

0

Protegido solo se puede acceder por subclases en otros paquetes. Las clases en el mismo paquete también pueden acceder a campos, métodos y constructores protegidos, incluso si no son una subclase de la clase del miembro protegido.

Override: Método de instancia en una subclase con la misma firma.

respuesta de su pregunta:
Pero si usted no quiere extendsAnimal class en su Machine class, entonces no es simplemente anulando su función normal de su propia clase.

Cuestiones relacionadas