java权限修饰符

devtools/2025/1/19 23:31:34/

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

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

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

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

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

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

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

1. public

  • 定义: public 是最高权限的访问修饰符。
  • 访问范围: 任何地方都可以访问被 public 修饰的类、方法或字段,包括同一包内、其他包中的类,甚至是子类。
  • 使用场景: 当你希望某个成员可以被任何其他类访问时,使用 public 修饰符。
java">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 修饰符。

java">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 默认采用包级访问权限。也就是说,只有同一包中的其他类可以访问该类、字段、方法。

访问范围:

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

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

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

4. private

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

访问范围:

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

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

java">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.ppmy.cn/devtools/151947.html

相关文章

Hadoop•用Web UI查看Hadoop状态词频统计

听说这里是目录哦 通过Web UI查看Hadoop运行状态🐇一、关闭防火墙二、在物理计算机添加集群的IP映射三、启动集群四、进入HDFS的Web UI 词频统计🦩1、准备文本数据2、在HDFS创建目录3、上传文件4、查看文件是否上传成功5、运行MapReduce程序6、查看MapRe…

ES6中有哪些作用域

在ES6(ECMAScript 2015)中,作用域(Scope)是指变量、函数和对象在代码中的可访问范围。ES6 引入了新的作用域规则,除了传统的全局作用域和函数作用域外,还新增了块级作用域。以下是 ES6 中的主要…

STM32 HAL库函数入门指南:从原理到实践

1 STM32 HAL库概述 STM32 HAL(Hardware Abstraction Layer)库是ST公司专门为STM32系列微控制器开发的一套硬件抽象层函数库。它的核心设计理念是在应用层与硬件层之间建立一个抽象层,这个抽象层屏蔽了底层硬件的具体实现细节,为开发者提供了一套统一的、…

vue2:实现上下两栏布局,可拖拽改变高度

要拖拽改变两栏高度,那么总高度要确定,在拖拽的过程中,实时根据光标位置计算两栏高度,所以: 1、最外层有一个box, 高度是屏幕高度screenHeight; 2、该值在页面挂载时获取初始值(window.innerHeight-100),这里减少100,因为窗口上面有工具栏; 3、监听窗口resize事件…

Linux安装Docker教程(详解)

如果想要系统学习docker,建议进入官方文档中学习:docker官方文档 一. 基本概念 Docker Desktop 和 Docker Engine 有什么区别? Docker Desktop for Linux 提供用户友好的图形界面,可简化容器和服务的管理。它包括 Docker Engine&#xff0c…

力扣动态规划-2【算法学习day.96】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关…

NVIDIA视频编解码

开源了两个项目:英伟达显卡视频编解码、jetson视频编解码。都是基于官方SDK进行的封装,由于官方自带的demo晦涩难懂并且每块都是独立的,我对SDK进行二次封装并形成了一套较为完整的视频编解码流程,调用简单,有完整的测…

MySQL的不同SQL模式导致行为不同?

现象: 我在两个mysql库都有相同定义的表,其中一个字段是varchar(1200)。当我都对这个表进行insert操作,而且超过此字段的规定长度(此处是1200),这两库的行为是不一样的:库B是直接报错too long&…