Dichiarazione di classe privata [duplicato]


Possibile duplicato:
Java: Perché possiamo definire una classe di livello superiore come privata?

Perché non possiamo dichiarare una classe esterna privata? Se possiamo avere una classe privata interna, allora perché non possiamo avere una classe privata esterna...?

Author: Community, 2013-02-04

6 answers

La classe esterna privata sarebbe inutile in quanto nulla può accedervi.

Vedi maggiori dettagli:

Java: Perché possiamo definire una classe di livello superiore come privata?

 20
Author: Amit, 2017-05-23 10:31:27

Per rispondere alla tua domanda:

Se possiamo avere una classe privata interna, perché non possiamo avere una classe esterna classe privata...?

È possibile, la distinzione è che la classe interna è al livello di accesso "classe", mentre la classe "esterna" è al livello di accesso "pacchetto". Dal Tutorial Oracle :

Se una classe non ha alcun modificatore (il valore predefinito, noto anche come package-private), è visibile solo all'interno del proprio pacchetto (i pacchetti sono denominati gruppi di classi correlate-imparerai su di loro in una lezione successiva.)

Quindi, package-private (che non dichiara alcun modificatore) è l'effetto che ci si aspetterebbe dal dichiarare una classe "esterna" privata, la sintassi è solo diversa.

 10
Author: stevebot, 2013-02-04 18:37:07

private il modificatore renderà la tua classe inaccessibile dall'esterno, quindi non ci sarebbe alcun vantaggio di questo e penso che sia per questo che è illegale e solo public, abstract & final sono consentiti.

Nota: Anche tu non puoi farlo protected.

 7
Author: Subhrajyoti Majumder, 2016-12-09 20:01:13

È possibile.

package test;

public class Test {
    public static void main(String[] args) {
        B b = new B();
    }
}

class B {
  // Essentially private - cannot be accessed anywhere else but inside `test`
}
 4
Author: OldCurmudgeon, 2016-06-14 01:37:53

Non puoi avere private classe ma puoi avere second classe:

public class App14692708 {
    public static void main(String[] args) {
        PC pc = new PC();
        System.out.println(pc);
    }
}

class PC {
    @Override
    public String toString() {
        return "I am PC instance " + super.toString();
    }
}

Ricorda anche che static la classe interna è indistinguibile dalla classe separata tranne che il suo nome è OuterClass.InnerClass. Quindi, se non vuoi usare "chiusure", usa la classe interna statica.

 2
Author: Suzan Cioc, 2013-02-04 18:14:21

Private rende la classe accessibile solo alla classe in cui è dichiarata. Se rendiamo privata l'intera classe, nessuno dall'esterno può accedere alla classe e la rende inutile.

La classe interna può essere resa privata perché la classe esterna può accedere alla classe interna dove non è il caso se si rende privata la classe esterna.

 0
Author: Prabhakar, 2013-02-04 18:16:47