Java中的访问修饰符有哪些

在 Java 中,访问修饰符(Access Modifiers)用于控制类、方法、变量和构造器的访问权限。Java 提供了四种访问修饰符,分别是:

  • public
  • protected
  • default(包私有,没有显式修饰符)
  • private

public

  • 访问范围:最大范围的访问权限。
  • 作用:
    • 被 public 修饰的类、方法、变量或构造器可以在任何地方访问。
    • 如果类是 public,则类名必须与文件名一致。
public class MyClass {
    public int myVar;
    public void myMethod() {
        System.out.println("Public Method");
    }
}

protected

  • 访问范围:
    • 同一包内的类可以访问。
    • 不同包中的子类可以访问。
  • 作用:
    • 主要用于继承场景,允许子类访问父类的成员。
package com.example;

public class Parent {
    protected int myVar;
    protected void myMethod() {
        System.out.println("Protected Method");
    }
}

package com.another;

import com.example.Parent;

public class Child extends Parent {
    void accessParent() {
        myVar = 10;       // 可以访问 protected 变量
        myMethod();       // 可以访问 protected 方法
    }
}

default(包私有)

  • 访问范围:
    • 同一包内的类可以访问。
    • 不同包中的类无法访问。
  • 作用:
    • 如果不显式指定访问修饰符,则默认为 default。
package com.example;

class MyClass {
    int myVar; // default 访问权限
    void myMethod() {
        System.out.println("Default Method");
    }
}

private

  • 访问范围:
    • 仅限当前类内部访问。
  • 作用:
    • 用于封装类的内部实现细节,防止外部直接访问。
public class MyClass {
    private int myVar;
    private void myMethod() {
        System.out.println("Private Method");
    }

    public void setMyVar(int value) {
        this.myVar = value; // 可以在类内部访问 private 变量
    }
}

访问修饰符的总结

访问修饰符类内部同一包内不同包的子类不同包的非子类
public✔️✔️✔️✔️
protected✔️✔️✔️
default✔️✔️
private✔️

访问修饰符的使用场景

public:
用于暴露 API,如工具类的方法或常量。例如:public static final int MAX_VALUE = 100;

protected:
用于允许子类扩展父类的功能。例如:protected void init() { … }

default:
用于包内共享的辅助类或工具方法。例如:void helperMethod() { … }

private:
用于封装类的内部实现细节。例如:private String secretKey;

注意事项

  • 类的访问修饰符只能是 public 或 default(包私有)。
  • 接口中的方法默认是 public,变量默认是 public static final。
  • 构造器可以使用 public、protected、default 或 private。
  • private 构造器常用于单例模式或工具类。
package com.example;

public class AccessExample {
    public int publicVar = 1;
    protected int protectedVar = 2;
    int defaultVar = 3; // default 访问权限
    private int privateVar = 4;

    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");
    }
}

class AnotherClass {
    void testAccess() {
        AccessExample example = new AccessExample();
        System.out.println(example.publicVar);       // 可以访问
        System.out.println(example.protectedVar);    // 可以访问
        System.out.println(example.defaultVar);      // 可以访问
        // System.out.println(example.privateVar);  // 编译错误,无法访问 private 变量
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小九没绝活

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

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

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

打赏作者

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

抵扣说明:

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

余额充值