欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 【JAVA面试】java权限修饰符

【JAVA面试】java权限修饰符

2025/1/12 21:49:46 来源:https://blog.csdn.net/NaturalHarmonia/article/details/145058310  浏览:    关键词:【JAVA面试】java权限修饰符

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


Java 的访问权限修饰符

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

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

1. public

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

2. protected

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

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

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


3. 默认(Default / Package-Private)

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

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

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

4. private

特点
  • private 表示私有权限。
  • 只能在类的内部访问,其他类(即使是同一个包中的类)无法访问。
应用场景
  • 方法和变量:用于封装类的内部实现细节,不允许外部直接访问。
示例
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();  // 类内部访问}
}
访问示例
  • 只能在类内部访问:
    PrivateExample example = new PrivateExample();
    example.accessPrivate();  // 通过公共方法访问私有成员
    

5. 类的访问权限

类的权限修饰符
  • public:可以被任何包中的类访问。
  • default:只能被同一个包中的类访问。
  • 类不能使用 privateprotected 修饰。
示例
// 包级私有类
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方法、变量仅类内部封装类的内部实现细节,保护类的完整性

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com