跳至主要內容

03. Java访问修饰符

LiuSongLing大约 3 分钟javajava

了解Java中的访问修饰符,这些修饰符用于设置变量方法构造函数 的访问级别。

简单地说,有四个访问修饰符:public、private、protected 和 default(无关键字)。

在我们开始之前,注意,顶级类只能使用 public 或 default 访问修饰符。在成员层面,我们可以使用所有四个。

1.default(默认)

当我们不明确使用任何关键字时,Java将对给定类、方法或属性使用默认访问修饰符。

默认访问修饰符也称为 package-private,这意味着所有成员都在同一包中可见,但无法从其他包访问:

package com.sky.accessmodifiers;

public class SuperPublic {
    static void defaultMethod() {
        ...
    }
}

defaultMethod() 可以在同一软件包的另一个类中访问:




package com.baeldung.accessmodifiers;

public class Public {
    public Public() {
        SuperPublic.defaultMethod(); // Available in the same package.
    }
}

然而,它在其他软件包中不可用。

2.public(公共)

添加到类、方法或属性中的 pubilic 能让所有软件包中的所有其他类访问它修饰的类、方法或属性

这是限制最少的访问修饰符:

package com.sky.accessmodifiers;

public class SuperPublic {
    public static void publicMethod() {
        ...
    }
}

publicMethod() 在另一个软件包中可用:

package com.sky.accessmodifiers.another;

import com.sky.accessmodifiers.SuperPublic;

public class AnotherPublic {
    public AnotherPublic() {
        SuperPublic.publicMethod(); // Available everywhere. Let's note different package.
    }
}

3.private(私有)

任何具有 private 关键字的方法、属性或构造函数都只能从同一类访问。

这是限制性最强的访问修饰符,也是封装概念的核心。所有数据都将被外界隐藏:







package com.sky.accessmodifiers;

public class SuperPublic {
    static private void privateMethod() {
        ...
    }
    
     private void anotherPrivateMethod() {
         privateMethod(); // available in the same class only.
    }
}

4.protected(受保护的)

protected(受保护的) 访问修饰符 介于 publicprivate 访问级别之间。

如果我们使用 protected 的关键字声明方法、属性或构造函数,我们可以从相同的软件包(如软件包私有访问级别)以及从其类的所有子类访问该成员,即使它们位于其他软件包中:

package com.sky.accessmodifiers;

public class SuperPublic {
    static protected void protectedMethod() {
        ...
    }
}

protectedMethod() 在子类中可用(无论软件包如何):

package com.baeldung.accessmodifiers.another;

import com.baeldung.accessmodifiers.SuperPublic;

public class AnotherSubClass extends SuperPublic {
    public AnotherSubClass() {
        SuperPublic.protectedMethod(); // Available in subclass. Let's note different package.
    }
}







5.总结

访问控制修饰符可见性范围类成员访问权限
public公共的所有类都可以访问,无论它们在哪个包中。
protected受保护的同一包中的类;不同包中该类的子类可以访问。
private私有的仅限于当前类内部访问,子类也无法访问。
default默认同一包中的其他类可以访问,但不同包中的类无法访问,即使它们是子类。