Java访问修饰符的区别

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
同一个包内(不是子包),不用import,直接使用类名就可以使用了。
很明显,私有方法无法在不同类被访问。

package study;

public class day00_访问修饰符_同一个包内 {
    public void accessMethods() {
        day00_访问修饰符 publicClass = new day00_访问修饰符();
        publicClass.publicMethod();         // 可以访问
        publicClass.protectedMethod();      // 可以访问
        publicClass.packagePrivateMethod(); // 可以访问
//         publicClass.privateMethod();     // 不能访问
    }
}

day00_访问修饰符_子包实验.java
子包情况,需要import study.day00_访问修饰符。

package study.day00_访问修饰符_子包;

import study.day00_访问修饰符;

public class day00_访问修饰符_子包实验 extends day00_访问修饰符 {
    public void accessProtectedMethod() {
        publicMethod();        // 可以访问,因为是 public
        protectedMethod();     // 可以访问,因为是子类
        // packagePrivateMethod(); // 不能访问,要相同包路径才能访问包级私有(package-private)方法, 现在多了一层路径所以不允许访问
        // 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();     // 不能访问,私有方法
    }
}

总结:
private: 同类
default: 同类,同包(相同路径)
protected:同类,同包(相同路径),子类
public: 公共的
访问权限范围递增顺序:private -> (default) -> protected -> public

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重剑DS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值