在面向对象编程中,公共,私有和受保护的是什么?


Answers:


152

它们是访问修饰符,可帮助我们实现封装(或信息隐藏)。它们告诉编译器哪些其他类应有权访问所定义的字段或方法。

private -只有当前的类才能访问该字段或方法。

protected -仅此类的当前类和子类(有时还包括相同包装的类)将有权访问该字段或方法。

public -任何类都可以引用该字段或调用该方法。

假定这些关键字被用作类定义中字段或方法声明的一部分。


4
请注意,在Java中,同一软件包的成员可以访问受保护的成员
Landon Kuhn

2
是的,Java还有第四个访问修饰符,它是空字符串。不提供任何访问修饰符将允许从任何程序包级别的类进行访问。
S

1
我喜欢“编译器”部分,因为我知道大多数语言都可以在运行时轻松访问所有函数/类,例如,通过.NET中的反射。因此,我倾向于说,这些访问修饰符基本上只是程序员的帮助,它通过隐藏某些东西来指导其他使用相同代码的程序员。
2009年

1
某些语言具有某些特殊性。像在Delphi中一样,私有成员是同一单元上的其他类所必需的,如果您不希望这种行为,则必须使用严格的私有。
法比奥·戈麦斯

1
C#还执行相同程序包的访问保护成员技巧。从本质上讲,C#只是微软的Java
iGbanam 2012年

6

它们并不是真正的概念,而是特定的关键字,它们通常在C ++和Java等流行语言中出现(语义略有不同)。

本质上,它们旨在允许类限制对成员(字段或函数)的访问。这个想法是,一种类型被允许以另一种类型访问的次数越少,所创建的依赖关系就越少。这样可以更轻松地更改访问的对象,而不会影响引用该对象的对象。

广义上讲,公共意味着允许每个人访问,私有意味着仅允许同一类的成员访问,而受保护意味着也允许子类的成员。但是,每种语言都为此添加了自己的东西。例如,C ++允许您非公开继承。在Java中,还有一个默认的(程序包)访问级别,并且有关于内部类的规则等。


6

这三个都是在类中使用的访问修饰符和关键字。公共声明的任何内容都可以由该类内或该类之外的任何对象使用,私有变量只能由该类内的对象使用,并且不能通过直接访问进行更改(因为它可以通过诸如friend function之类的函数进行更改) .protected部分下定义的任何内容都可以由该类及其刚刚派生的类使用。


1

公共项目是任何其他类都可以访问的项目。您只需要知道它是什么对象,就可以使用点运算符来访问它。受保护意味着一个类及其子类可以访问该变量,但不能访问其他任何类,因此它们需要使用getter / setter对该变量执行任何操作。私有意味着只有该类才能直接访问该变量,其他所有内容都需要一种方法/函数来访问或更改该数据。希望这可以帮助。


1

如上,但定性:

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

您提供的访问权限越少,实现细节泄漏出对象的可能性就越小。减少此类泄漏意味着在不破坏对象客户的情况下更改对象实现方式的灵活性(也称为“松散耦合”)。这是真正了解的基本知识。


0

总而言之,在面向对象的编程中,所有事物都被建模为类和对象。类包含属性和方法。公共,私有和受保护的关键字用于指定从其他类或其他.dll甚至其他应用程序访问类的这些成员(属性和方法)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.