Privéklasse-declaratie

Mogelijk duplicaat:
Java: waarom kunnen we een klasse op het hoogste niveau definiëren als privé?

Waarom kunnen we geen privateouter class declareren? Als we innerlijke privéles kunnen hebben, waarom kunnen we dan geen uiterlijke privéles hebben…?


Antwoord 1, autoriteit 100%

Privé buitenste klasse zou nutteloos zijn omdat niets er toegang toe heeft.

Bekijk meer details:

Java: waarom kunnen we een klasse op het hoogste niveau als privé?


Antwoord 2, autoriteit 59%

privatemodifier zal je klas ontoegankelijk maken van buitenaf, dus hier zou geen voordeel van zijn en ik denk dat het daarom illegaal is en alleen public, abstract& finalzijn toegestaan.

Opmerking: zelfs jij kunt het niet protectedmaken.


Antwoord 3, autoriteit 50%

Om je vraag te beantwoorden:

Als we innerlijke privéles kunnen hebben, waarom kunnen we dan geen uiterlijke hebben?
privéles…?

Dat kan, het onderscheid is dat de binnenste klasse zich op het toegangsniveau “klasse” bevindt, terwijl de “buitenste” klasse zich op het toegangsniveau “pakket” bevindt. Uit de Oracle-zelfstudies:

Als een klasse geen modifier heeft (de standaard, ook bekend als pakket-private), is deze alleen zichtbaar binnen zijn eigen pakket (pakketten worden groepen van gerelateerde klassen genoemd – je zult er in een latere les meer over leren.)

Dus pakket-privé (geen modifier declareren) is het effect dat je zou verwachten als je een “buitenste” klasse privé verklaart, de syntaxis is alleen anders.


Antwoord 4, autoriteit 14%

Dat kan.

package test;
public class Test {
    public static void main(String[] args) {
        B b = new B();
    }
}
class B {
  // Essentially package-private - cannot be accessed anywhere else but inside the `test` package
}

Antwoord 5, autoriteit 5%

Je kunt geen privateles hebben, maar wel een secondles:

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();
    }
}

Onthoud ook dat de innerlijke klasse staticniet te onderscheiden is van een aparte klasse, behalve dat de naam OuterClass.InnerClassis. Dus als je geen “sluitingen” wilt gebruiken, gebruik dan statische innerlijke klasse.


Antwoord 6

private maakt de klasse alleen toegankelijk voor de klasse waarin deze is gedeclareerd. Als we de hele klas privé maken, heeft niemand van buitenaf toegang tot de klas en wordt deze nutteloos.

Binnenklasse kan privé worden gemaakt omdat de buitenste klasse toegang heeft tot de binnenklasse waar dit niet het geval is als u de buitenste klasse privé maakt.

Other episodes