当修饰符修饰类时:
- 在java中类只可被public修饰,或者被默认为包可见性(即不被修饰时),且java中类不可被private,protect修饰符修饰(这是与c++不同的)
public修饰类时,说明该类可被任意类访问(实例化,继承,实现)
当类不被修饰时,即自动默认为包可见时,意味着该类只能被处于同一个包中的类访问,处于其所属包中的子包中的类是不可以访问的它的。
当修饰符修饰类成员时:
public修饰类成员时,表明该成员可以通过该类的任意对象进行显示的调用
private修饰类成员时,该成员只能被该类中的实例域,或者类方法调用,不可通过该类对象在外界(即非类定义区)进行显示的调用
- 当用protected修饰类成员时,该成员可被其所属类的子类以及与其所属类处于同一包中的其他类所访问
这里需要一个例子:
package javatesting;
public class A {
public static void main(String[] args){
A a=new A();
System.out.println(a.a);
}
protected int a=3;
}
package javatesting;
public class B {
public static void main(String[] args){
A a=new A();
System.out.println("the B :"+a.a);//默认可见性,即同一包中如果一个类的类成员为默认可见性,则同处一个包中的其他类可显示的调用该类的类成员
}
}
运行结果为: the B:3
要注意,一个class文件中只能有一个public类(可以有默认包可见性的类无数个),说明以上两个类是分别定义在同一个包中的两个class文件
4 当被默认修饰的类成员时(即该类成员没有使用任何修饰符时,被默认修饰),该成员只可被其所属类处于同一包中的其他类所访问,有点像阉割版的protected,好歹protected还可以被其所属子类的类成员调用,嗯,下面是例子:
package javatesting;
public class A {
public static void main(String[] args){
A a=new A();
System.out.println(a.a);
}
int a=3;//此时的a没有被任何修饰符修饰
}
package javatesting;
public class B {
public static void main(String[] args){
A a=new A();
System.out.println("the B :"+a.a);//此处的运行结果为 the B:3
}
}