访问权限系列一(public/private/protected/default):成员变量
通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况)
如下Test.java中内容:
package com.java; /* * 关于成员变量多种情况下的访问权限: * ------------------------------------------------------------------------------ * public private protected default * 1 同一个包,同一个类 可以 可以 可以 可以 * * 2 同一个包,不同的类 可以 不可以 可以 可以 * * 3 不同的包里的类 可以 不可以 不可以 不可以 * * 4 同一个包里有继承关系的类 可以 不可以 可以 可以 * * 5 不同的包里有继承关系的类 可以 不可以 可以 不可以 *-------------------------------------------------------------------------------- * 结论: public都可以访问; private只有在同一个类里才能直接访问; protected同一个包里可以访问,若想跨包访问,必须有继承关系; default只有同一个包里的可以访问; * */ import cn.java.Test_01; import cn.java.test_02; //public class Test{ //这里1,2,3用;---->1不用实验public是公开的,都可以; public class Test extends Test_01{ //这里4,5用; public static void main(String[] args){ /*-------------------------2--------------------------- A T = new A();//同一个包,不同的类; System.out.println( T.m_1() ); System.out.println( T.m_2() ); System.out.println( T.m_3() ); System.out.println( T.m_4() );// 报错:m_4()可以在A中访问private */ /*-------------------------3--------------------------- Test_01 T = new Test_01();//不同的包里的类,没有继承关系; System.out.println( T.m_1() );//可以 System.out.println( T.m_2() );//报错:m_2在Test_01里不是公共的,无法从外部程序包中访问; System.out.println( T.m_3() );//不可以 System.out.println( T.m_4() );//不可以 */ /*-------------------------4---------------------------- A T = new A();//同一个包里的不同类,有继承关系; System.out.println( T.m_1() );//可以 System.out.println( T.m_2() );//可以 System.out.println( T.m_3() );//可以 System.out.println( T.m_4() );//报错: 可以在类A中访问; */ /*-------------------------5---------------------------- Test T = new Test(); System.out.println( T.m_1() );//可以 System.out.println( T.m_2() );//m_2不是公共的,无法从外部程序包中访问; System.out.println( T.m_3() );//可以 System.out.println( T.m_4() );//可以在Test_01中访问; */ } } class A{ public int m_1(){return 1;} int m_2(){return 1;} protected int m_3(){return 1;} private int m_4(){return 1;} }
如下是Test_01.java的内容:
package cn.java;
public class Test_01{ //成员变量 public int i_1 = 100; int i_2 = 200;//默认default protected int i_3 = 300; private int i_4 = 400; //成员方法 public int m_1(){ return 1; } int m_2(){ return 1; } protected int m_3(){ return 1; } private int m_4(){ return 1; } }