2013-01-25 15 views
5

Qual è l'esempio di accesso indiretto al membro privato della superclasse dalla sottoclasse?Accesso ai membri privati ​​di una superclasse

Una classe nidificata ha accesso a tutti i membri privati ​​della classe che racchiude entrambi i campi e i metodi. Pertanto, una classe nidificata pubblica o protetta ereditata da una sottoclasse ha accesso indiretto a tutti i membri privati ​​della superclasse .

Citazione di http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

risposta

4

Nella citazione, si parla di "annidata" classe

qui è un esempio di come una classe interna può accedere ai campi privati ​​della classe esterna.

class OuterClass { 
private int x = 7; 

public void makeInner(){ 
    InnerClass in = new InnerClass(); 
    in.seeOuter(); 
} 
class InnerClass { 
    public void seeOuter() { 
     System.out.println("Outer x is " + x); 
    } 
} 
public static void main(String[] args) { 
    OuterClass.InnerClass inner = new OuterClass().new InnerClass(); 
    inner.seeOuter(); 
} 

}

Infine, se si estende una classe con la classe interna, essi dovranno anche accedere ai campi privati ​​dei OuterClass se la vostra classe interna è pubblico o protetto

0

E 'da supporre (ma il compilatore non farla rispettare, avverte solo), che un metodo private finirà di essere utilizzato da un metodo di default public, protected o (in caso contrario è inutile).

Quindi, la classe di estensione può chiamare "indirettamente" il metodo private chiamando lo public, protected o il metodo predefinito che termina chiamando il metodo privato.

+0

Quindi, in quel caso non differisce da una classe normale avere accesso a metodi modificatori pubbliche quando sottoclasse –

+0

Questo tipo di accesso può essere fatto da anche altre classi. La mia domanda riguarda il caso specifico di citazione. –

0

Sì, siamo in grado di accedere a privato membri di una superclasse nella classe figlio attraverso il metodo pubblico della superclasse che può essere invocato dalla variabile di riferimento della classe figlia che solleva l'id di riferimento della classe figlio. ad esempio: -

class Base 
{ 
    private int x=10; 

    void show() 
    { 
     System.out.println(x); 
    } 
} 

class Child extends Base 
{ 

    public static void main(String... s)// public static void main(String[] args) 
    {  
     //rom jdk 1.7 main can be defined like above 
     Child c=new Child(); 
     c.show(); 
    } 
} 

L'uscita sarà il 10

Problemi correlati