类型 | public | protected | (default) | private |
---|---|---|---|---|
同一个类 | Y | Y | Y | Y |
同一个包(不同类) | Y | Y | Y | N |
不同包子类 | Y | Y | N | N |
不同包非子类 | Y | N | N | N |
这里的(default)是指什么都不写的情况,而不是关键字default !!!
同一个类
public class MyClass {
public int a;
protected int b;
int c;//(default)也就是不写
private int d;
public void method(){
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
同一个包(不同类)
使用上面的类进行调用
public class MyClassDiff {
public void method(){
System.out.println(new MyClass().a);
System.out.println(new MyClass().b);
System.out.println(new MyClass().c);
}
}
不同包子类
import demo05.MyClass;
public class MyClassSon extends MyClass {
public void method(){
System.out.println(super.a);
System.out.println(super.b);
}
}
不同包非子类
import demo05.MyClass;
public class MyClassStranger {
public void method(){
System.out.println(new MyClass().a);
}
}
补充:上面是用来修饰方法和变量,当权限修饰符用来修饰类的时候
类型 | public | protected | (default) | private |
---|---|---|---|---|
外部类 | Y | N | Y | N |
成员内部类 | Y | Y | Y | Y |
局部内部类 | N | N | Y | N |
这里的(default)是指什么都不写的情况,而不是关键字default !!!
//外部类
public class DemoClass {
//成员内部类
public class demo01{ //public
}
private class demo02{//private
}
protected class demo03{//protected
}
class demo04{//(default)
}
public void method(){
//局部内部类
class demo05{//(default)
}
}
}
//外部类(default)
class DemoClassAnother {
}