【JAVA面试】java权限修饰符

server/2025/1/11 12:42:20/

在 Java 中,访问权限(Access Modifiers)用于控制类、方法、成员变量等的访问范围。合理使用访问权限能够增强代码的安全性、封装性以及可维护性。


Java 的访问权限修饰符

Java 提供了以下四种访问权限修饰符,分别是:

修饰符类内同包子类跨包
public
protected❌ (除非通过继承访问)
default(无修饰符)
private

1. public

特点
  • public 表示全局访问权限。
  • 可以被任何其他类访问,无论是否位于同一个包中。
应用场景
  • :类可以被任何地方使用。
  • 方法和变量:通常用于工具类方法、常量,或者明确需要对外公开的接口。
示例
java">public class PublicExample {public int publicField = 10;public void publicMethod() {System.out.println("This is a public method.");}
}
访问示例
  • 在同一个包或不同包中都可以访问:
    java">PublicExample example = new PublicExample();
    example.publicMethod();  // 可访问
    System.out.println(example.publicField);  // 可访问
    

2. protected

特点
  • protected 表示受保护权限。
  • 只能在同一个包中访问,或通过继承关系由子类访问。
应用场景
  • 方法和变量:用于希望对子类开放但不对外公开的成员。
示例
java">package package1;public class ProtectedExample {protected int protectedField = 20;protected void protectedMethod() {System.out.println("This is a protected method.");}
}
访问示例
  • 同包访问

    java">package package1;public class SamePackage {public void accessProtected() {ProtectedExample example = new ProtectedExample();example.protectedMethod();  // 可访问System.out.println(example.protectedField);  // 可访问}
    }
    
  • 跨包访问(通过子类)

    java">package package2;import package1.ProtectedExample;public class SubClass extends ProtectedExample {public void accessProtected() {protectedMethod();  // 可访问System.out.println(protectedField);  // 可访问}
    }
    
  • 跨包无继承关系时无法访问


3. 默认(Default / Package-Private)

特点
  • 如果没有指定修饰符,则默认是包级私有权限(package-private)。
  • 只能在同一个包中访问,跨包访问不允许。
应用场景
  • :限制类仅在包内部使用。
  • 方法和变量:适用于内部实现细节,不需要对子类或外部提供访问权限。
示例
java">package package1;class DefaultExample {  // 无修饰符,包级私有类int defaultField = 30;  // 默认权限void defaultMethod() {  // 默认权限System.out.println("This is a default method.");}
}
访问示例
  • 同包访问

    java">package package1;public class SamePackage {public void accessDefault() {DefaultExample example = new DefaultExample();example.defaultMethod();  // 可访问System.out.println(example.defaultField);  // 可访问}
    }
    
  • 跨包访问不允许

    java">package package2;import package1.DefaultExample;  // 无法导入,编译错误
    

4. private

特点
  • private 表示私有权限。
  • 只能在类的内部访问,其他类(即使是同一个包中的类)无法访问。
应用场景
  • 方法和变量:用于封装类的内部实现细节,不允许外部直接访问。
示例
java">public class PrivateExample {private int privateField = 40;private void privateMethod() {System.out.println("This is a private method.");}public void accessPrivate() {System.out.println(privateField);  // 类内部访问privateMethod();  // 类内部访问}
}
访问示例
  • 只能在类内部访问:
    java">PrivateExample example = new PrivateExample();
    example.accessPrivate();  // 通过公共方法访问私有成员
    

5. 类的访问权限

类的权限修饰符
  • public:可以被任何包中的类访问。
  • default:只能被同一个包中的类访问。
  • 类不能使用 privateprotected 修饰。
示例
java">// 包级私有类
class PackagePrivateClass {void method() {System.out.println("This is a package-private class.");}
}// 公共类
public class PublicClass {public void method() {System.out.println("This is a public class.");}
}

访问权限的设计原则

  1. 信息隐藏

    • 使用 private 隐藏实现细节,防止外部直接操作类的内部状态。
    • 提供 publicprotected 的方法(如 Getter/Setter)来控制对私有数据的访问。
  2. 最小化访问范围

    • 优先选择更严格的访问权限(如 private),然后根据需要逐步放宽。
    • 确保不会暴露不必要的接口或数据。
  3. 包内模块化

    • 使用 default 权限将类或成员限制在包内,便于模块化管理。
  4. 继承与扩展

    • 使用 protected 允许子类访问需要的功能,同时隐藏不必要的细节。

总结

修饰符适用范围访问范围典型用途
public类、方法、变量任意地方公共 API、工具类、通用方法
protected方法、变量同包或子类继承支持,允许子类扩展功能
default类、方法、变量同包内可访问内部实现,不需要对外暴露的功能
private方法、变量仅类内部封装类的内部实现细节,保护类的完整性

通过合理使用这些访问修饰符,可以有效控制代码的访问权限,增强系统的封装性和安全性。


http://www.ppmy.cn/server/157464.html

相关文章

学Java第二十六天---------static的用法

1.静态变量static 1.1什么是static 1.2什么是静态变量 1.3静态变量代码示例: public class Student {private String name;private int age;private String id;static String teacherName;public Student() {}public Student(String name, int age, String id) {this.name n…

2012mfc,几种串

串,即是由符组成的串,在标准C,标准C,MFC中串这一功能的实现是不相同的,C完全兼容了C. 1.标准C中的串 在标准C中没有串数据类型,C中的串是有符类型的符数组或符类型的符指针来实现的.如: char name[26]"This is a Cstyle string"; //或char *name"This is a…

Web3 社交革命:告别中心化,拥抱多元连接

随着互联网的发展,我们已经习惯了通过中心化平台与他人互动,无论是社交媒体、即时通讯还是在线社区,所有这些平台都由少数大公司控制。Web3的出现,意味着一种新的社交模式正在悄然崛起——去中心化社交网络(Decentrali…

页面滚动下拉时,元素变为fixed浮动,上拉到顶部时恢复原状,js代码以视频示例

页面滚动下拉时,元素变为fixed浮动js代码 以视频示例 <style>video{width:100%;height:auto}.div2,#float1{position:fixed;_position:absolute;top:45px;right:0; z-index:250;}button{float:right;display:block;margin:5px} </style><section id"abou…

Unity使用Vuforia插件进行AR开发

零、最终效果 Unity使用Vuforia插件进行AR开发 一、资源准备 1、在Unity中添加Vuforia插件 &#xff08;1&#xff09;在UnityAssetStore中搜索Vuforia插件并添加到自己的资源中 网页地址&#xff1a;https://assetstore.unity.com/packages/templates/packs/vuforia-engine…

项目中如何选择垃圾回收器

选择合适的垃圾回收器对Java应用程序的性能和可扩展性至关重要。不同的垃圾回收器适用于不同类型的应用场景。以下是一些常见的垃圾回收器及其适用场景&#xff1a; 1. 串行收集器&#xff08;Serial Collector&#xff09; 特点&#xff1a;使用单线程进行垃圾回收&#xff…

计算机网络之---局域网

什么叫局域网 局域网&#xff08;LAN&#xff0c;Local Area Network&#xff09; 是指在一个相对较小的区域内&#xff0c;如家庭、办公室、学校、企业等&#xff0c;连接多个计算机和设备的网络。局域网的特点是覆盖范围小、传输速度快、构建成本较低。 局域网的主要特点&…

数据结构——栈的实现

今天&#xff0c;我们来写一下关于栈的博文。 1.首先我们先了解一下什么是栈&#xff1f; 一&#xff1a;概念&#xff1a; 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另…