public:公开的,任何地方都可以访问。
protected:受保护的,同一个包中的类和所有子类(可跨包)可以访问。
private:私有的,只有在同一个类中可以访问。
默认(无修饰符):包级私有(package-private),只有在同一个包中可以访问。
文件名和 public 类名必须匹配:
一个 .java 文件中可以有多个类,但最多只能有一个 public 类。
如果某个类被声明为 public,那么文件名必须与这个类的名字完全一致(区分大小写),并且文件扩展名是 .java。
包声明:
通常,Java 类会被放置在包(package)中。包声明应该在文件的第一行(在任何导入语句之前)。
类的可见性:
如果一个类没有被声明为 public,那么它的可见性是包级私有的(package-private),这意味着它只能在同一个包中访问。
光看文字我感觉啥用没有,下面给出实例代码来说明。
目录结构:
day00_访问修饰符.java
给出四中访问修饰符类型的方法
package study;
public class day00_访问修饰符 {
public void publicMethod() {
System.out.println("Public method in PublicClass");
}
protected void protectedMethod() {
System.out.println("Protected method in PublicClass");
}
void packagePrivateMethod() {
System.out.println("Package-private method in PublicClass");
}
private void privateMethod() {
System.out.println("Private method in PublicClass");
}
}
day00_访问修饰符_同一个包内.java
很明显,私有方法无法在不同类被访问。
package study;
public class day00_访问修饰符_同一个包内 {
public void accessMethods() {
day00_访问修饰符 publicClass = new day00_访问修饰符();
publicClass.publicMethod(); // 可以访问
publicClass.protectedMethod(); // 可以访问
publicClass.packagePrivateMethod(); // 可以访问
// publicClass.privateMethod(); // 不能访问
}
}
day00_访问修饰符_不同包内.java
我感觉这里就是核心了,可以发现在不同包下,只要继承了不同包下的类,就可以访问它的protected类型方法,即使不在同一个包下。
但是默认的不加显示修饰符的包级私有(package-private)方法,就算你继承了,是它的子类,但是父类和子类不同同一个包下,那就是无法访问包级私有(package-private)方法。
package study_实验访问修饰符;
import study.day00_访问修饰符;
public class day00_访问修饰符_不同包内 extends day00_访问修饰符
{
public void accessProtectedMethod() {
publicMethod(); // 可以访问,因为是 public
protectedMethod(); // 可以访问,因为是子类
// packagePrivateMethod(); // 不能访问,因为不同包
// privateMethod(); // 不能访问,私有方法
}
}