Java中权限修饰符的权限范围

本文介绍了Java中的四种权限修饰符:public、protected、默认(包内可见)和private。public成员在任何地方都可访问,protected主要为子类保护,无修饰符的成员在同包内可见,而private仅限类内部使用。通过示例解释了权限修饰符的使用场景和限制。
关键字类内部相同包类不同包类
public可存取可存取可存取
protected可存取可存取子类可存取
可存取可存取不可存取
private可存取不可存取不可存取

提示>>>简单来说,依权限大小来区分,就是private、无关键字、protected与public,设计时要使用哪个权限,是依经验或团队讨论而定,如果一开始不知道使用哪个权限,就先使用private,以后视需求再开放权限。

1、public
public权限不论在类内部,相同的包内部,还是在不同的包之间都能够使用。
2、protected
protected权限主要是用来保护子类的,被protected修饰的成员对于本包和其子类可见。
1⃣️基类的protected成员是包内可见的,并且对子类可见;
2⃣️若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
3、
未声明权限修饰符表示包内友好,表示在同一个包内或同一个.java文件中都能使用,在不同的包内不能使用。
4、private
private权限仅限于在定义它的类内使用,其他地方都不能访问private成员,是一种封装的体现。
只有这个类的内部可以访问:
a、类内部指类的成员函数和定义初始化
b、这个限制是对类的而不是对对象

class Fraction{
    private int a;
    ……
    public void show(Fraction r){
        System.out.println(r.a);
    }
    ……
}

上述代码中在函数show中访问了对象r对私有成员,但是代码是正确对,可以编译实现的。
这就是上面所讲的第二点,private的限制是对类的而不是对对象。即我使用对象r的私有成员a是在类Fraction内部,所以语法上是正确的。而如果我在其他类中直接访问对象r的私有成a,则会出现语法错误。

### Java 中的权限修饰符 #### public 访问修饰符 `public` 是最宽松的一种访问级别。当声明为 `public` 的时候,该成员可以被任何其他类所访问,无论这些类位于哪个包中。 ```java public class PublicClass { public String publicField; public void publicMethod() { System.out.println("This is a public method."); } } ``` [^1] #### protected 访问修饰符 `protected` 关键字允许同一包内的所有类以及不同包中的子类来访问受保护的成员。这意味着如果一个类继承了一个父类,则即使两者不在同一个包里,子类也可以访问其父类里的 `protected` 成员。 ```java class Parent { protected int age; protected void displayAge() { System.out.println("Parent's Age: " + age); } } class Child extends Parent { @Override protected void displayAge() { super.displayAge(); System.out.println("Child can access parent's protected members"); } } ``` [^2] #### default (默认) 访问修饰符 如果没有显式指定访问修饰符,默认情况下会应用这种访问级别。具有默认可见性的元素仅在同一包内可访问;对于来自外部包的对象来说不可见也不可用。 ```java // 假设此文件名为 DefaultExample.java 并且位于 com.example 包下 package com.example; class DefaultClass { // 默认访问级别 static final String DEFAULT_MESSAGE = "Default Access Modifier"; void defaultMessage(){ System.out.println(DEFAULT_MESSAGE); } } ``` [^3] #### private 访问修饰符 `private` 是最为严格的限定方式之一。它使得只有定义它的那个特定类能够直接操作带有此类标记的数据项或行为。即使是派生自这个基底类型的衍生类别也无法触及到私有的成分。 ```java public class PrivateModifierDemo { private double salary; // Getter and Setter methods to manipulate the value of 'salary' public void setSalary(double newSalary){ this.salary = newSalary; } public double getSalary(){ return salary; } } ``` [^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值