当前位置: 首页 > article >正文

java权限修饰符

Java 的访问修饰符(Access Modifiers)是控制类、方法、变量等成员访问范围的关键工具。它们定义了类、方法或成员变量的可见性,以及在不同位置(如不同包或子类)是否能访问这些成员。Java 提供了四种主要的访问修饰符:public、protected、默认和 private。

  • public:公共的,所有地方都可以访问。

  • protected:本类 ,本包,其他包中的子类都可以访问。

  • 默认(没有修饰符):本类 ,本包可以访问。

    注意:默认是空着不写,不是default

  • private:私有的,当前类可以访问。
    public > protected > 默认 > private

publicprotected默认private
同一类中
同一包中的类
不同包的子类
不同包中的无关类

1. public

  • 定义: public 是最高权限的访问修饰符。
  • 访问范围: 任何地方都可以访问被 public 修饰的类、方法或字段,包括同一包内、其他包中的类,甚至是子类。
  • 使用场景: 当你希望某个成员可以被任何其他类访问时,使用 public 修饰符。
public class Person {
    public String name;  // public字段,任何地方都可以访问
    
    public void greet() {  // public方法,任何地方都可以调用
        System.out.println("Hello, my name is " + name);
    }
}

这里,Person 类的 name 字段和 greet 方法都是 public,可以被任何其他类访问和调用。

2. protected

  • 定义: protected 修饰符限制了访问范围,使得只有同一个包中的类和所有子类(无论它们是否在同一个包中)可以访问被 protected 修饰的成员。

访问范围:

  • 同一包内的类;
  • 继承该类的子类(无论是否在同一包内)。

使用场景:
当你希望限制对成员的访问,仅允许同一包内的类或子类访问时,使用 protected 修饰符。

public class Animal {
    protected String name;
    
    protected void makeSound() {  // protected方法
        System.out.println("Animal sound");
    }
}

public class Dog extends Animal {
    public void bark() {
        makeSound();  // 可以调用protected方法
        System.out.println("Woof! My name is " + name);  // 可以访问protected字段
    }
}

在这个例子中,name 字段和 makeSound() 方法都被 protected 修饰,因此它们可以被 Dog 类访问,因为 Dog 是 Animal 的子类,即使它们不在同一个包中。

3. 默认(没有修饰符)

  • 定义: 当没有显式指定访问修饰符时,Java 默认采用包级访问权限。也就是说,只有同一包中的其他类可以访问该类、字段、方法。

访问范围:

  • 同一包内的类可以访问;
  • 不允许外部包的类访问。

使用场景:
当你希望某个成员仅限于同一个包内的类访问时,使用默认访问权限。

class Car {  // 默认访问权限类
    String model;  // 默认访问权限字段
    
    void startEngine() {  // 默认访问权限方法
        System.out.println("Engine started");
    }
}

4. private

  • 定义: private 修饰符提供了最严格的访问控制,它仅允许该类的内部方法访问被 private 修饰的成员。

访问范围:

  • 仅限于类内部访问;
  • 其他类无法直接访问。

使用场景:
当你希望完全封装某些数据,不希望外部直接访问这些数据时,使用 private 修饰符。通常与 getter 和 setter 方法一起使用,以便间接访问私有字段。

public class BankAccount {
    private double balance;  // 私有字段,不能被外部直接访问
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
    
    public double getBalance() {
        return balance;  // 提供一个公开方法来访问私有字段
    }
}

修饰符优先级(从高到低)

  • public:最开放的访问级别,允许任何地方访问。
  • protected:允许同一包内和子类访问。
  • default(包访问):仅允许同一包内访问。
  • private:最严格,仅允许类内部访问。

修饰符的应用场景:

  • public:在类和方法设计时使用,表示它们应该是开放的,允许任何地方访问。
  • protected:在设计类的继承体系时使用,特别是当你希望子类能够访问基类的某些功能时。
  • default:适用于不希望对外暴露的类,或者只希望类的成员在包内共享时使用。
  • private:用来封装类内部的数据,防止外部直接访问,常与方法一起使用来控制数据的安全性。

http://www.kler.cn/a/510084.html

相关文章:

  • 【C++】面试题整理(未完待续)
  • 麒麟系统下载依赖到本地
  • 如何通过 Apache Airflow 将数据导入 Elasticsearch
  • 3. Go函数概念
  • js基础---var与let的区别以及const的使用
  • 浅谈云计算14 | 云存储技术
  • 线上工单引发的思考:Spring Boot 中 @Autowired 与 @Resource 的区别
  • YOLOv10-1.1部分代码阅读笔记-ops.py
  • 【HarmonyOS NAPI 深度探索9】发布到 npm 并管理版本
  • kubuntu24.04配置vmware17.5.1
  • 【Office学习】PPT中的图片如何放清晰地放到论文中
  • 深度学习J9周:Inception v3算法实战与解析
  • git创建分支,推送分支,合并分支,回退
  • 使用 Python 开发一个 AI Agent 自媒体助手示例
  • dbt Semantic Layer 详细教程-6 :指标(metrics)配置规范及示例
  • 认识 MySQL 和 Redis 的数据一致性问题
  • 动态主机配置协议 (DHCPv4)介绍,详细DHCP协议学习笔记
  • LeetCode:47.全排列 II
  • WPS计算机二级•高效操作技巧
  • TCP TIME-WAIT 状态为什么要坚持 2MSL
  • 【MySQL中InnoDB引擎的行锁是怎么实现的?】
  • 业务幂等性技术架构体系之服务幂等深入剖析
  • Java并发编程:线程安全的策略与实践
  • 查看电脑或笔记本CPU的核心数方法及CPU详细信息
  • AIP-111 平面
  • 2025.1.16——六、BabySQL 双写绕过|联合注入