114

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

1
  • +1, one of those things I found a bit hard to grok
    – user65663
    Commented Jun 20, 2009 at 2:27

7 Answers 7

190

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.

10
  • 4
    note that in java members of the same package can access protected members Commented Jun 20, 2009 at 2:28
  • 2
    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.
    – Ben S
    Commented Jun 20, 2009 at 2:31
  • 1
    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.
    – merkuro
    Commented Jun 20, 2009 at 2:35
  • 1
    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. Commented Jun 20, 2009 at 3:06
  • 1
    C# also does the access-protected-members-of-same-package trick. In essence, C# is just Microsoft's Java
    – Igbanam
    Commented Nov 23, 2012 at 8:16
14

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.

8

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.

4

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.

4

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.

0

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.

0
0

These are access modifiers. All the data and functions(behaviours) are encapsulated or bounded into a single unit called a class. In order to access the properties and behaviour of the class we use objects. But it's also important to decide which behaviour or property has to be exposed or should remain accessible to all the classes and which behaviour or property has to be private. So, that's when access modifiers like public, private, protected and protected internal help in doing so. This act of defining privilege to the class or method or property is called as abstraction.

Not the answer you're looking for? Browse other questions tagged or ask your own question.