C++中和JAVA中,public、private、 protected 的用法不完全一样。
C++中:
- public修饰的成员变量或方法可以被任意其他的类访问。
- private修饰的成员变量和方法,只能有类本身以及友元函数和友元类来访问。
- protected 修饰的成员变量和方法,能被类本身、继承本身的子类、友元函数以及友元类来访问。
- 默认情况下,在class关键字定义的类中,第一个作用域限定词(public、private、 protected )出现之前的成员变量或方法都是private的。而在用struct关键字定义的类中,第一个限定词出现之前的成员变量和方法都是public的。两个作用域限定词之间的成员变量和方法都是被前一个限定词限制的。如
public: int a;
int b;
private double d;
以上例子中,int b;相当于public int b;
- 继承类(派生类)可以通过继承类对象(此处指访问自己内部的 protected 成员,不能访问其他继承类对象内的成员)访问基类中的 protected 成员,但是不可以通过基类对象访问基类中的 protected 成员。
- 不能通过类的实例(对象)访问类的 protected 成员。
- 友元关系时不可继承的。
- private继承将基类中的所有成员都变成private。
protected 继承将基类中的public成员变成 protected ,其他成员不变。
继承保持基类中的限定条件不变。
JAVA中:
- private修饰的成员变量和函数只能在类本身和内部类中被访问。
- protected 修饰的成员变量和函数能被类本身、子类及同一个包中的类访问。
- public修饰的成员变量和函数可以被类、子类、同一个包中的类以及任意其他类访问。
- 默认情况(不写)下,属于一种包访问,即能被类本身以及同一个包中的类访问。
- 下面这个表能清楚的说明java中作用域操作符的作用:
package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×