wat is het verschil tussen `public class` en gewoon `class`?

Ik heb gemerkt dat als je publicniet voor een class schrijft, het hetzelfde werkt als een public class. Ik kan niet begrijpen waarom zo? Het zou een foutmelding moeten geven als ik een klasse niet als public, privateof protectedverklaar. Maar het werkt prima. Wat is de reden?


Antwoord 1, autoriteit 100%

public, protecteden privatezijn toegangsmodifiers. Openbaar betekent dat het onderwerp toegankelijk is voor elke klasse, beschermd door subklasse, privé door de klasse zelf, geen modifier betekent “pakket beveiligd”, dus het onderwerp kan worden geopend door klassen uit hetzelfde pakket.

Onderwerp is klasse, methode, lidvariabele.


Antwoord 2, autoriteit 93%

Ik heb gemerkt dat als je niet openbaar schrijft voor een les, het hetzelfde werkt als een openbare les.

Nee, dat doet het niet. Tenzij het openbaar is, is de klasse niet zichtbaar voor andere code die niet in hetzelfde pakket zit. De standaardtoegankelijkheid (die niet expliciet kan worden gespecificeerd) is dat een klasse (of ander lid) alleen zichtbaar is voor andere code binnen hetzelfde pakket.

Je moet de Java-taal lezen Specificatiesectie 6.6en de Java-zelfstudie (toegang tot leden van a Class)voor meer details.


Antwoord 3, autoriteit 23%

Klassen zijn package privateStandaard (zoals beschreven hier ), dus het gedraagt ​​zich niet op dezelfde manier. Je denkt gewoon dat het is omdat je niet hebt geprobeerd om je klas van een ander pakket te consumeren.


4, Autoriteit 3%

Er moet slechts één openbare klasse per .java-bronbestand zijn en de naam van het bestand moet overeenkomen met deze publieke klasse.

Vergelijkbare vraag wordt eerder gevraagd. Vind het alsjeblieft hier


5, Autoriteit 3%

Het werkt alleen hetzelfde omdat u werkt met slechts waarschijnlijk één bestand en in hetzelfde pakket.

Als u meer dan één pakket hebt, dan hebt u het probleem. De klasse die geen “publiek” heeft voordat de naam van de klas niet in een ander pakket kan worden gemaakt. U kunt zijn constructeur niet gebruiken. Je hebt er gewoon geen toegang tot het pakket dat de klasse is gemaakt.


6

Als u geen toegangsmodificator geeft, is het standaard Pakket privétoegang. De klas is niet toegankelijk buiten het pakket. Idealiter had de JLS een sleutelwoord moeten opnemen voor toegang tot het pakket om verwarring en onbedoelde gevolgen te voorkomen.

zoiets,

default class Student{}

7

Geen normale klasse en een openbare klasse werken niet dezelfde. een klasse zonder toegangsmodificator zoals openbaar wordt automatisch ingesteld op standaardtoegang. (Nee, u kunt niet expliciet als toegang toestaan). Als u een standaardtoegangsklasse in een pakket maakt, kan die klasse niet toegankelijk zijn buiten dat pakket, maar de openbare klasse kan zelfs buiten dat pakket worden geopend


8

Een klasse die niet wordt gedeclareerd met een toegangsmodificator wordt automatisch als standaard gedeclareerd bij runtime
Met deze is de klas toegankelijk datzelfde pakket
Maar niet een ander pakket

Other episodes