1. class的访问权限
class的访问权限只有public和package两种,不存在private和protected(内部类是特例)。
每一个编译单元(即.java文件)至多只能有一个public class,且如果有的话,该public class名必须与文件名相同。
class访问权限是member访问权限的基础。
2. member的访问权限
当一个class是可访问的时候,member的访问权限才有意义。
private、package、protected、public,具体的就不详细说了。
protected包含package权限。
7月27日补充:member的访问权限是针对类而言的
public: 对所有类可见。
protectd: 对其Ext Class可见 + package。
package: 对同一pkg内的类可见。
private: 仅对member所在的类可见。
我们这里说的都是Class,而不是Object。有时候在理解上会有这样的混淆:
class Test
{
private int i;
}
public class PrivateTest
{
public static void main(String[] args)
{
Test t = new Test();
System.out.println("i = " + t.i); // syntax error
}
}
我们的确是获得了Test对象t,i也的确是t的member,不过我们访问i是在PrivateTest类中,根据private的定义,这里依旧是会出错。
所以说,member的访问权限是针对类而言的,而不是针对对象。不能单纯地以为只要获得了对象(引用),就能随便访问对象中的所有成员。
10月10日补充:可见的意思
如果类A的字段i对类B可见,则在类B中可以通过类的对象引用(假设有A a = new A();)(如果是static字段,则是通过类名)来访问字段i,即:可以在类B中直接写a.i(如果是static字段,则是可以写A.i)。
那么,我们现在回头看,如果类A的字段i是:
public: 对所有类可见 --> 即:所有的类中都可以写a.i或是A.i
protectd: 对其Ext Class可见 + package --> 即:只有与类A同包的类,或是类A的子类中可以写a.i或是A.i
package: 对同一pkg内的类可见 --> 即:只有与类A同包的类中可以写a.i或是A.i
private: 仅对member所在的类可见 --> 即:只有类A本身可以直接用a.i或是A.i
这里又涉及到另外一个问题,即我自己常用的表达:private、package不可继承。其实这里private、package权限字段是由于对子类不可见所以不能继承。[#0x0006]里面的那个理解很好:可以理解为ext class隐式包含一个base class,base class根据member的访问权限决定是否将member暴露给ext class。
分享到:
相关推荐
在C++中,结构体和类非常相似,主要区别在于默认的成员访问权限。当一个类的成员是另一个结构体或类时,该成员的大小会直接加到类的总大小上。 文件名中,"resize_size_value.pass.c"可能是一个测试用例,用于验证...
Classes**:在C++中,`struct`和`class`非常相似,主要区别在于`struct`默认成员访问权限为`public`,而`class`默认成员访问权限为`private`。选择使用哪种取决于具体的场景需求。 ##### 4. **Functions(函数)**...
class CResourceException;// Win resource failure exception class CUserException; // Message Box alert and stop operation class CGdiObject; // CDC drawing tool class CPen; // a pen / HPEN wrapper...
2. **成员(member of a class)**:包括嵌套类、属性、方法或构造方法;即除了初始化和注释之外的类的所有顶级内容。 3. **注释(comment)**:文中特指实现注释(implementation comments),而非文档注释(Javadoc)。 #...
DataContractSerializer是.NET Framework中用于序列化和反序列化数据的主要组件,主要用于Windows Communication Foundation (WCF)服务之间的数据交换。在本篇第六课中,我们将探讨其反序列化原理和可能的攻击向量。...
Classes**:在C++中,struct和class的区别主要在于默认访问权限不同,通常struct用于表示数据结构,而class用于实现抽象的数据类型。 - **Inheritance**:继承是面向对象编程的核心概念之一,应谨慎使用以避免复杂...
public、protected、private定义了类成员的访问权限,以及默认访问权限。 22. Java中类的声明 public class、extends、implements是声明Java类的关键字。 23. Java中方法的声明 方法的声明可以是static、final、...
On the other hand, you must include the header file for Foo if your class subclasses Foo or has a data member of type Foo. Sometimes it makes sense to have pointer (or better, scoped_ptr) members ...
- **Non-member, Static Member, and Global Functions**:非成员函数、静态成员函数和全局函数都有各自的适用场景。全局函数应尽量避免使用,以减少命名冲突和提高模块化程度。 - **Local Variables**:局部变量只...
Classes**:结构体(struct)和类(class)在C++中有不同的默认访问级别,应根据实际需求选择合适的类型。 - **Inheritance**:继承是一种强大的机制,但也可能带来复杂性和难以维护的问题,因此需要谨慎使用。 -...
- **外部函数、静态成员函数和全局函数 (Nonmember, Static Member, and Global Functions):** 这些函数应尽可能地减少使用,以降低代码间的耦合度。如果必须使用,应该确保它们具有明确的责任和边界。 - **局部...
attributes_only = [member for member in all_members if not inspect.isroutine(member[1])] print(attributes_only) ``` #### 四、小结 通过上述介绍,我们可以看到,在Python中获取类属性列表有很多种方法,每...
可以用该用户登录系统, 使用命令“ulimit -f”和“ulimit -Hf”可分别显示其fsize,fsize_hard的大小. //如何查看小型机适配器卡及硬盘的微码级别microcode level lscfg -vl device_name //查询SSA卡的微码级别 #...
1:加載: <object id="mycontrol" classid="clsid:4A44CF4E-F859-4328-AA22-3E9D7AFFF1AB" codebase="Hello.CAB" > 2:調用ActiveX方法 ('AUTOREAD_MEMBERSHIP')" value="AUTOREAD_MEMBERSHIP" id="button1" /> 3...
程序头表(Program Header Table)是ELF文件的重要组成部分之一,它包含了关于程序加载和执行时所需的段信息。 - **程序头表的结构**:每个程序头条目都描述了一个程序段,包括它的起始地址、结束地址、类型等。 - **...
// pkgId of framework-res.apk determines number (which is 0x01) $ apktool if com.htc.resources.apk I: Framework installed to: 2.apk // pkgId of com.htc.resources is 0x02 $ apktool if ...
mov r1,0x4567 | movw r1,0x4567 ;immediate could not be encoded Other instructions than just what is shown above are also affected. The last part of the principles, the smaller the better, may ...