在Java编程中,访问权限是非常重要的概念,因为它可以保证代码的安全性和封装性。访问权限有四种,分别是public、protected、default和private。
private
:如果一个类的方法或者变量被private
修饰,那么这个类的方法或者变量只能在该类本身中被访问,在类外以及其他类中都不能显示地进行访问。
default
(默认访问权限):如果一个类的方法或变量被包访问权限修饰,也就意味着只能在同一个包中的其他类中显示地调用该类的方法或者变量,在不同包中的类中不能显示地调用该类的方法或变量。
protected
:如果一个类的方法或者变量被protected
修饰,对于同一个包的类,这个类的方法或变量是可以被访问的。对于不同包的类,只有继承于该类的类才可以访问到该类的方法或者变量。
public
:被public
修饰的方法或者变量,在任何地方都是可见的。
private
package com.ymqx.访问权限;public class Person {private String name = "test";public String getName(){//只能在本类中被访问System.out.println(this.name);return this.name;}
}
package com.ymqx.访问权限;public class Test {public static void main(String[] args){Person person = new Person();//Person类外不能直接访问//System.out.println(person.a);person.getName();}
}输出:test
方法或者变量被private修饰,只能在本类中被访问。
default
package com.ymqx.访问权限;public class Person {String name = "test";public String getName(){System.out.println(this.name);return this.name;}
}
package com.ymqx.访问权限;public class Test {public static void main(String[] args){Person person = new Person();//同一个包中的其他类中显示地调用System.out.println(person.name);person.getName();}
}输出:
test
test
同一个包中的其他类中显示地调用。
package com.ymqx.访问权限2;import com.ymqx.访问权限.Person;public class Test{public static void main(String[] args){Person person = new Person();//不同的包,Person类不能显示地调用nameSystem.out.println(person.name);person.getName();}
}
不同包中的类中不能显示地调用。
protected
package com.ymqx.访问权限;public class Person {protected String name = "test";public String getName(){System.out.println(this.name);return this.name;}
}
package com.ymqx.访问权限2;import com.ymqx.访问权限.Person;public class Zi extends Person {public void getPersonName() {//不同的包,继承可以访问父类protected修饰变量System.out.println(super.name);}
}
不同包的类,只有继承于该类的类才可以访问到该类 protected 修饰方法或者变量。
public
package com.ymqx.访问权限;public class Person {public String name = "test";public String getName(){System.out.println(this.name);return this.name;}
}
package com.ymqx.访问权限2;import com.ymqx.访问权限.Person;public class Test{public static void main(String[] args){Person person = new Person();//同一个包中的其他类中显示地调用System.out.println(person.name);person.getName();}
}输出:
test
test
不同包中的类也可以显示地调用。
小结
- 四种访问权限从小到大:private < default(默认访问权限)< protected < public。
- 当定义变量时不加任何修饰会默认为默认权限。
- 在子类中访问父类中的变量时需要用super。