不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
Java访问修饰符
访问修饰符 | 同类 | 同包 | 不同包,子类 | 不同包,非子类 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
默认 | √ | √ | ||
private | √ |
- 1. 首先是同一个类(Test 类)中,4种权限修饰符所修饰成员的访问情况
package study; public class Test { public void print() { System.out.println("public方法!"); } protected void print1() { System.out.println("protected方法!"); } void print2() { System.out.println("默认方法!"); } private void print3() { System.out.println("privated方法!"); } public static void main(String[] args) { // TODO Auto-generated method stub Test test = new Test(); test.print(); test.print1(); test.print2(); test.print3(); } }
程序输出:
public方法! protected方法! 默认方法! privated方法!
- 2. 同一个包中(子类与其它类))4种权限修饰符所修饰成员的访问情况
- a. 同包中的子类
package study; public class Test { public void print() { System.out.println("public方法!"); } protected void print1() { System.out.println("protected方法!"); } void print2() { System.out.println("默认方法!"); } private void print3() { System.out.println("privated方法!"); } } class Son extends Test { public static void main(String[] args) { // TODO Auto-generated method stub Son son = new Son(); son.print(); son.print1(); son.print2(); son.print3();//这里提示错误,程序无法执行。 } }
- b. 同包的其他类
package study; public class Test { public void print() { System.out.println("public方法!"); } protected void print1() { System.out.println("protected方法!"); } void print2() { System.out.println("默认方法!"); } private void print3() { System.out.println("privated方法!"); } } class Other { public static void main(String[] args) { // TODO Auto-generated method stub Test test = new Test(); test.print(); test.print1(); test.print2(); test.print3();//这里提示错误,程序无法执行。 } }
- 3. 不同包中(子类与其它类))4种权限修饰符所修饰成员的访问情况
- 子类
package study; public class Test { public void print() { System.out.println("public方法!"); } protected void print1() { System.out.println("protected方法!"); } void print2() { System.out.println("默认方法!"); } private void print3() { System.out.println("privated方法!"); } } package study1; import study.*; public class Son1 extends Test{ public static void main(String[] args) { // TODO Auto-generated method stub Son1 son1 = new Son1(); son1.print(); son1.print1(); son1.print2();//程序错误,无法执行。 son1.print3();//程序错误,无法执行。 } }
- 其他类
package study; public class Test { public void print() { System.out.println("public方法!"); } protected void print1() { System.out.println("protected方法!"); } void print2() { System.out.println("默认方法!"); } private void print3() { System.out.println("privated方法!"); } } package study1; import study.*; public class Son1 { public static void main(String[] args) { // TODO Auto-generated method stub Test test = new Test(); test.print(); test.print1();//程序错误,无法执行。 test.print2();//程序错误,无法执行。 test.print3();//程序错误,无法执行。 } }
注意:所说的同一个包或者不同包,指的是编译后的class文件是否在同一个文件夹里。
博客借鉴:https://blog.csdn.net/u013771764/article/details/81226908