类和类成员的访问权限

本文详细介绍了Java中不同成员的访问权限,包括Public、默认的package、private和protected等,并通过示例展示了如何使用这些权限控制类成员的访问。

成员的访问权限

Public: 任何人,尤其是那些要使用这个类库的客户程序员,都能访问那个紧跟在public 后面声明的成员。

默认的package: 在同一个目录里面的文件,并且都没有明确指明它是属于哪个package 的。Java 会认为这类文件是属于这个目录的“默认package”的,因此对这个目录里边的其它文件来说,它们就都是package 权限的了。

private: 除非是用这个类(包含这个成员的类)的方法,否则一律不得访问。package 里的其它类也不能访问private 成员。一个package很可能是由好几个人合作开发的,因此private 能让你根据自己的需要修改那些成员,而不用担心这么做会不会对别的类产生影响。

protected: package 里面的类,那么你只能访问原先那个package 的public 成
员。(当然如果是在同一个package 里面继承的话,那么你还可以访问package 权限的成员。)有时基类的创建者会希望派生类能访问某个成员,而其它类则不能访问。这就是protected 要做的。protected 也赋予成员package 权限——也就是说,同一个package 里的其它类也可以访问protected 元素。

为了让代码显得更有条理,可能你选用这种风格,就是将public 成员都放在类的开头,接下来是protected 成员,然后是package 权限的,最后是private 成员。这样做的好处就是,当用户从上到下读代码的时候,会先看到对他们最重要的东西(就是能在文件以外访问的public 成员)。而当他们遇到非public 成员的时候,就会知道这是类的内部实现部分,这样就可以不读下去了。

类的访问权限
注意,类不能是private(这样除了这个类自己,其它人都 protected 的。因此类只有两种访问权限:package和public。如果你不希望别人访问这个类,你可以将它的构造函数设置成 private 的,这样除你之外,没人可以创建那个类的对象。而你则可以使用一个static 方法来创建对象。下面就是一例:

class Soup {
private Soup() {}
// (1) Allow creation via static method:
public static Soup makeSoup() {
return new Soup();
}
// (2) Create a static object and return a
reference
// upon request.(The "Singleton" pattern):
private static Soup ps1 = new Soup();
public static Soup access() {
return ps1;
}
public void f() {}
}

class Sandwich { // Uses Lunch
void f() { new Lunch(); }
}
// Only one public class allowed per file:
public class Lunch {
void test() {
// Can't do this! Private constructor:
//! Soup priv1 = new Soup();
Soup priv2 = Soup.makeSoup();
Sandwich f1 = new Sandwich();
Soup.access().f();
}
} ///:~

在C++中,类成员有三种访问权限控制符:`public`, `private`, `protected`。它们决定了的数据成员函数成员可以在哪里以及如何被访问。 ### 1. public(公共) 声明为 `public` 的成员可以被程序中的任何部分直接访问。 - **数据成员** 可以自由地读取修改。 - **成员函数** 可以由该的对象、派生对象或者其他外部代码调用。 ```cpp class Example { public: int pubVar; // 公共变量 void setPub(int x) { pubVar = x; } // 公共函数 }; ``` ### 2. private(私有) 声明为 `private` 的成员只能在这个内部的成员函数或友元函数中使用,外界无法直接访问这些成员。 - 这有助于隐藏实现细节并保护数据的安全性完整性。 ```cpp class Example { private: int privVar; void setPriv() {} // 私有函数 }; ``` ### 3. protected(受保护) 当一个成员被标记为 `protected` 时,在其所属及其所有衍生内它是可见并且可用;但是对其他非继承自此的地方而言它仍然是不可见且不能访问的。 - 它常用于让子能够共享某些功能而不对外公开这些信息。 ```cpp class BaseClass { protected: int protVar; }; class Derived : public BaseClass { public: void accessProtectedMember() { cout << "Protected Member Value:" << this->protVar << endl; } }; ``` 通过合理运用这三者之间的差异特性,我们可以设计出既安全又具有良好结构特性的应用程序组件模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值