Java 中的访问修饰符详解

在 Java 中,访问修饰符用于控制类、方法、变量和构造器的访问权限。Java 提供了四种访问修饰符:publicprotecteddefault(默认,不使用任何关键字)和 private。本文将详细解析这些访问修饰符的作用及其区别。


1. 访问修饰符概述

访问修饰符类内部同一包内子类其他包
public✔️✔️✔️✔️
protected✔️✔️✔️
default✔️✔️
private✔️

2. public 修饰符

2.1 作用

public 是最开放的访问修饰符,表示被修饰的成员可以被任何类访问。

2.2 示例

public class MyClass {
    public int publicVar = 10;

    public void publicMethod() {
        System.out.println("Public Method");
    }
}

2.3 使用场景

  • 类的公共接口方法。
  • 需要跨包访问的类或成员。

3. protected 修饰符

3.1 作用

protected 表示被修饰的成员可以被同一包内的类以及不同包中的子类访问。

3.2 示例

package com.example;

public class Parent {
    protected int protectedVar = 20;

    protected void protectedMethod() {
        System.out.println("Protected Method");
    }
}

package com.another;

import com.example.Parent;

public class Child extends Parent {
    void accessProtected() {
        System.out.println(protectedVar); // 可以访问父类的 protected 成员
        protectedMethod();
    }
}

3.3 使用场景

  • 需要被子类访问的成员。
  • 同一包内的类需要访问的成员。

4. default 修饰符

4.1 作用

default(默认,不使用任何关键字)表示被修饰的成员只能被同一包内的类访问。

4.2 示例

package com.example;

class MyClass {
    int defaultVar = 30;

    void defaultMethod() {
        System.out.println("Default Method");
    }
}

4.3 使用场景

  • 包内共享的成员。
  • 不需要被其他包访问的成员。

5. private 修饰符

5.1 作用

private 是最严格的访问修饰符,表示被修饰的成员只能被定义它的类访问。

5.2 示例

public class MyClass {
    private int privateVar = 40;

    private void privateMethod() {
        System.out.println("Private Method");
    }

    public void accessPrivate() {
        System.out.println(privateVar); // 可以访问 private 成员
        privateMethod();
    }
}

5.3 使用场景

  • 类的内部实现细节。
  • 不希望被外部类访问的成员。

6. 访问修饰符的使用场景总结

访问修饰符使用场景
public类的公共接口方法、需要跨包访问的类或成员。
protected需要被子类访问的成员、同一包内的类需要访问的成员。
default包内共享的成员、不需要被其他包访问的成员。
private类的内部实现细节、不希望被外部类访问的成员。

7. 访问修饰符的注意事项

  1. 类的访问修饰符

    • 类只能使用 publicdefault 修饰符。
    • public 类可以被任何包访问,default 类只能被同一包内的类访问。
  2. 构造器的访问修饰符

    • 构造器可以使用 publicprotecteddefaultprivate 修饰符。
    • private 构造器常用于单例模式。
  3. 内部类的访问修饰符

    • 内部类可以使用所有访问修饰符。
    • private 内部类只能被外部类访问。

8. 示例代码

package com.example;

public class AccessModifiersExample {
    public int publicVar = 10;
    protected int protectedVar = 20;
    int defaultVar = 30;
    private int privateVar = 40;

    public void publicMethod() {
        System.out.println("Public Method");
    }

    protected void protectedMethod() {
        System.out.println("Protected Method");
    }

    void defaultMethod() {
        System.out.println("Default Method");
    }

    private void privateMethod() {
        System.out.println("Private Method");
    }

    public void accessPrivate() {
        System.out.println(privateVar); // 可以访问 private 成员
        privateMethod();
    }
}

package com.another;

import com.example.AccessModifiersExample;

public class AnotherClass {
    public static void main(String[] args) {
        AccessModifiersExample example = new AccessModifiersExample();

        System.out.println(example.publicVar); // 可以访问 public 成员
        example.publicMethod();

        // System.out.println(example.protectedVar); // 编译错误:无法访问 protected 成员
        // example.protectedMethod();

        // System.out.println(example.defaultVar); // 编译错误:无法访问 default 成员
        // example.defaultMethod();

        // System.out.println(example.privateVar); // 编译错误:无法访问 private 成员
        // example.privateMethod();
    }
}

9. 总结

Java 中的访问修饰符用于控制类、方法、变量和构造器的访问权限。通过合理使用访问修饰符,可以提高代码的封装性和安全性。以下是四种访问修饰符的主要区别:

  • public:任何类都可以访问。
  • protected:同一包内的类和不同包中的子类可以访问。
  • default:同一包内的类可以访问。
  • private:只有定义它的类可以访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦幻南瓜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值