【Java】权限修饰符

目录

权限修饰符

权限修饰符-示例代码


权限修饰符

Java有四种访问权限,其中三种有访问权限修饰符,分别为 privatepublic protected,还有一种不带任何修饰符:

  • private:Java语言中对访问权限限制的最窄的修饰符,一般称之为”私有的“。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许挎包访问。
  • default:即不加任何访问修饰符,通常称为”默认访问模式“,该模式下,只允许在同一个包中进行访问。
  • protected:介于public 和 private 之间的一种访问修饰符,一般称之为”保护形“。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
  • public:Java语言中访问限制最宽的修饰符,一般称之为”公共的“。被其修饰的类、属性以及方法 不仅可以跨类访问,而且允许跨包(package)访问。
权限修饰符可以使用在 方法/属性/类
权限修饰符 同一个类 同一个包 不同包的子类 不同包的非子类
private(私有) × × ×
default(默认) × ×
protected(受保护) ×
public(公开)

开发使用的次数排名:private > public > protected > default

权限修饰符-示例代码

层级结构如下:

【Java】权限修饰符_第1张图片

下面的代码注释,就说明访问不到 报错

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; // 同一个包
    }
}

下一篇文章:

你可能感兴趣的:(java,开发语言,权限修饰符,面向对象,private,public,protected)