目录
权限修饰符
权限修饰符-示例代码
权限修饰符
Java有四种访问权限,其中三种有访问权限修饰符,分别为 private,public 和 protected,还有一种不带任何修饰符:
- private:Java语言中对访问权限限制的最窄的修饰符,一般称之为”私有的“。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许挎包访问。
- default:即不加任何访问修饰符,通常称为”默认访问模式“,该模式下,只允许在同一个包中进行访问。
- protected:介于public 和 private 之间的一种访问修饰符,一般称之为”保护形“。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- public:Java语言中访问限制最宽的修饰符,一般称之为”公共的“。被其修饰的类、属性以及方法 不仅可以跨类访问,而且允许跨包(package)访问。
权限修饰符 | 同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 |
private(私有) | √ | × | × | × |
default(默认) | √ | √ | × | × |
protected(受保护) | √ | √ | √ | × |
public(公开) | √ | √ | √ | √ |
开发使用的次数排名:private > public > protected > default
权限修饰符-示例代码
层级结构如下:
下面的代码注释,就说明访问不到 报错
Parent.java
package com.面向对象.Demo10;
public class Parent {
private int private_Age; // 当前类
protected int protect_Age; // 同一个包/不同包的子类
public int public_Age; //同一个包/不同包
int default_Age; //同一个包
/**
* 权限修饰符(加在 方法/属性/类)
* 1.public
* 2.private 只能在本类中访问
* 3.default
* 4.protected
*/
public void public_a1() {
}
private void private_a2() {
}
// default void deafult_a3(){} //default方法前面不需要加default,报错
void default_a3() {
}
protected void protected_a4() {
}
public static void main(String[] args) {
Parent parent = new Parent();
parent.private_a2(); // 只能本类访问
parent.default_a3(); // 同一个包/类下可以访问
parent.protected_a4(); // 同一个包/类,不同包的子类 可以访问
parent.private_Age = 10;
parent.protect_Age = 10;
parent.public_Age = 10;
parent.default_Age = 10;
}
}
Demo01.java
package com.面向对象.Demo10;
public class Demo01 {
public static void main(String[] args) {
Parent parent = new Parent();
// parent.privat_a2(); //private只可以在同类中访问,这里访问不到
parent.default_a3(); // 同一个包/类下可以访问
parent.protected_a4(); // 同一个包/类,不同包的子类 可以访问
// parent.private_Age = 10; //只能同一个类
parent.protect_Age = 10;
parent.public_Age = 10;
parent.default_Age = 10;
}
}
Demo02.java
package com.面向对象.Demo11;
import com.面向对象.Demo10.Parent;
public class Demo02 extends Parent{
// 不同包的非子类
public static void main(String[] args) {
Parent parent = new Parent();
parent.public_a1();
// parent.private_a2(); // private只可以在同类中访问,这里访问不到
// parent.default_a3(); // 只能在同一个包/类下可以访问,这里访问不到
// parent.private_Age = 10; // 只能同一个类
// parent.protect_Age = 10; //同一个包/不同包的子类
parent.public_Age = 10;
// parent.default_Age = 10; // 同一个包
}
// 不同包的子类
public void test(){
protected_a4(); // 不同包的子类(同一个包/类,不同包的子类 可以访问)
// private_Age = 10; //同一个类
protect_Age = 10; //同一个包/不同类的子类
public_Age = 10; //公开
// default_Age = 10; // 同一个包
}
}
下一篇文章:继承练习