2012-07-24 12 views
7

Sono nuovo di Java e ho una domanda molto semplice.Ignora metodi protetti

Ho 2 classe genitore sotto lo stesso pacchetto. Animal Classe astratta e classe Machine.

Ora, la classe astratta Animal ha un metodo protetto. Sono consapevole che i metodi protetti sono accessibili se le classi sono sotto lo stesso pacchetto.

Posso accedere a tale metodo protetto nella mia classe Machine e la domanda è .. È possibile sovrascrivere tale metodo protetto? Senza estendere la classe Animal.

+2

Hai provato a farlo? Qual'era il risultato? –

+0

Override viene dopo l'ereditarietà ... quello che stai dicendo non è possibile ... :) –

risposta

21
  • protetta - può essere sovrascritto dalle sottoclassi, se sono nella stessa confezione o no
  • default (nessun accesso modificatore) - si può accedere o sovrascritto se entrambe le classi sono nella stessa confezione unica
+1

grazie per aver risposto a questa domanda di base. :) –

+0

questa è la risposta corretta. Denis Salibio, dovresti giocare un po 'con la gerarchia delle classi. – TecHunter

5

È possibile eseguire l'override dei metodi solo tramite l'estensione.

È possibile sovrascrivere un metodo protetto con una sottoclasse anonima, se lo si desidera. Per esempio.

public class Animal { 

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

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

In un'altra classe:

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

    Animal dog = new Animal() { 

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

    dog.speak(); 
} 

uscita sarà:

Woof! 
+0

Animale animale = nuovo cane(); Ho usato questo codice per accedere al metodo, mi chiedo solo se riesco a sovrascrivere il metodo protetto. –

+0

grazie per aver risposto a questa domanda di base. :) –

+0

Ho aggiornato la mia risposta per mostrare come è possibile creare una sottoclasse anonima di Animal per rappresentare un cane, senza in realtà creare una classe chiamata Dog. –

0

Al fine di eseguire l'override un metodo si deve estendere tale classe. Questo è ciò che sovrascrive: avere un metodo con la stessa firma della super-classe.

+0

grazie per aver risposto a questa domanda di base. :) –

1

, Override significa ereditare il comportamento dalla classe padre e ciò non è possibile senza estendere la classe.

public class PClass 
    { 



protected boolean methodA() 
      { 
    return true; 
     } 

    } 

public class CClass extends PClass 
     { 

protected boolean methodA() 
      { 
    return false; 
     } 
     } 

Eseguire il codice qui sotto per provarlo

public static void main(String[] args) 
    { 

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

    } 

O/p=false

qui stiamo sostituzione del comportamento di methodA

+0

grazie per aver risposto a questa domanda di base. :) –

0

Overriding per definizione dice ..

An istanza metho d in una sottoclasse con la stessa firma (nome, più il numero e il tipo dei suoi parametri) e restituisce il tipo come metodo di istanza nella superclasse sovrascrive il metodo della superclasse.

Quindi AFAIK se non si estende la super classe non è possibile sovrascrivere il metodo.

0

È possibile accedere a protetto solo da sottoclassi in altri pacchetti. Le classi nello stesso pacchetto possono anche accedere a campi, metodi e costruttori protetti, anche se non sono una sottoclasse della classe del membro protetto.

Override: Un metodo di istanza in una sottoclasse con la stessa firma.

risposta della tua domanda:
Ma se non si vuole extendsAnimal class nella vostra Machine class allora non ignorando la sua solo una normale funzione della propria classe.

Problemi correlati