ChatGPT解决这个技术问题 Extra ChatGPT

What are public, private and protected in object oriented programming?

What are public, private and protected in object oriented programming?

+1, one of those things I found a bit hard to grok

B
Ben S

They are access modifiers and help us implement Encapsulation (or information hiding). They tell the compiler which other classes should have access to the field or method being defined.

private - Only the current class will have access to the field or method.

protected - Only the current class and subclasses (and sometimes also same-package classes) of this class will have access to the field or method.

public - Any class can refer to the field or call the method.

This assumes these keywords are used as part of a field or method declaration within a class definition.


note that in java members of the same package can access protected members
Yes, and Java also has a fourth access modifier which is the empty string. Not giving any access modifier will allow access from any package-level class.
I like the "compiler" part, because most languages I know all functions/classes can be easily accessed at runtime for example via reflections in .NET. Therefore I tend to say, that these access modifiers are basically just a help for programmers to guide other programmers working on/with the same code by hiding certain things.
Some languages have some particularities. Like in Delphi, private members are acessible by other classes on the same unit, and you have to use strict private if you don't want this behavior.
C# also does the access-protected-members-of-same-package trick. In essence, C# is just Microsoft's Java
U
Uri

They aren't really concepts but rather specific keywords that tend to occur (with slightly different semantics) in popular languages like C++ and Java.

Essentially, they are meant to allow a class to restrict access to members (fields or functions). The idea is that the less one type is allowed to access in another type, the less dependency can be created. This allows the accessed object to be changed more easily without affecting objects that refer to it.

Broadly speaking, public means everyone is allowed to access, private means that only members of the same class are allowed to access, and protected means that members of subclasses are also allowed. However, each language adds its own things to this. For example, C++ allows you to inherit non-publicly. In Java, there is also a default (package) access level, and there are rules about internal classes, etc.


S
SagarPPanchal

All the three are access modifiers and keywords which are used in a class. Anything declared in public can be used by any object within the class or outside the class,variables in private can only be used by the objects within the class and could not be changed through direct access(as it can change through functions like friend function).Anything defined under protected section can be used by the class and their just derived class.


J
Jonathan Locke

as above, but qualitatively:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

the less access you provide the fewer implementation details leak out of your objects. less of this sort of leakage means more flexibility (aka "looser coupling") in terms of changing how an object is implemented without breaking clients of the object. this is a truly fundamental thing to understand.


m
mnuzzo

A public item is one that is accessible from any other class. You just have to know what object it is and you can use a dot operator to access it. Protected means that a class and its subclasses have access to the variable, but not any other classes, they need to use a getter/setter to do anything with the variable. A private means that only that class has direct access to the variable, everything else needs a method/function to access or change that data. Hope this helps.


Z
Zaki

To sum it up,in object oriented programming, everything is modeled into classes and objects. Classes contain properties and methods. Public, private and protected keywords are used to specify access to these members(properties and methods) of a class from other classes or other .dlls or even other applications.