Man!今天我单独将访问修饰限定符拿出来进行梳理,包你三分钟学会!想一步到位的可以直接看总结!
首先我们要知道哪些是访问修饰限定符,我们直接上图:
注意嗷,这里的No是序号的意思,不是不行的意思!!
看到这个表,最好记住的就是private和public,private的英文翻译就是私有的,被它修饰的变量或方法只能在同一个包的同一个类中调用,public的英文翻译是公共的,那就是被它修饰的不论在哪里都可以调用,当然——要符合基本的语法逻辑和语法范围。
其次就是我们的default,诶,是不是很熟悉,我们在最开始学习分支语序——switch的时候是不是在结尾的时候会有一个default?没错,就是它,今天我们讲的就是它在Java中的第二个用法——包访问权限。但是大家有没有发现,我们在修饰变量或者方法的时候,好像没有看到过default。那是因为如果一个类、方法或变量没有使用 **public**
、**protected**
** 或 **private**
修饰符,那么它具有包访问权限**(也称为默认访问权限),换句话说,包访问权限**通过不使用任何访问修饰符来实现,**所以我们不用单独地去写default,只需要知道有这么个东西存在就行。
比较复杂的就是我们的protected了:
package mypackage;
public class ParentClass {
protected int protectedVar = 10;
protected void protectedMethod() {
System.out.println("This is a protected method.");
}
}
class SamePackageClass {
public void accessProtected() {
ParentClass obj = new ParentClass();
System.out.println(obj.protectedVar); // 可以访问 protectedVar
obj.protectedMethod(); // 可以调用 protectedMethod
}
}
package anotherpackage;
import mypackage.ParentClass;
public class ChildClass extends ParentClass {
public void accessProtected() {
System.out.println(protectedVar); // 可以访问 protectedVar
protectedMethod(); // 可以调用 protectedMethod
}
}
// 不同包内的非子类无法访问 protected 成员
class AnotherPackageClass {
public void accessProtected() {
ParentClass obj = new ParentClass();
// System.out.println(obj.protectedVar); // 编译错误
// obj.protectedMethod(); // 编译错误
}
}
package anotherpackage;
import mypackage.ParentClass;
public class ChildClass extends ParentClass {
public void accessProtected() {
System.out.println(protectedVar); // 可以访问 protectedVar
protectedMethod(); // 可以调用 protectedMethod
}
}
package anotherpackage;
import mypackage.ParentClass;
class AnotherPackageClass {
public void accessProtected() {
ParentClass obj = new ParentClass();
// System.out.println(obj.protectedVar); // 编译错误
// obj.protectedMethod(); // 编译错误
}
}
**protected**
** 访问修饰符**:提供了一种介于public
和private
之间的访问级别。- 同一包内:
protected
成员可以在同一个包内的任何类中访问。 - 不同包内:
protected
成员可以在不同包内的子类中访问,但不能在不同包内的非子类中访问。 - 继承访问:子类可以访问父类的
protected
成员,即使它们在不同的包中。
总结:
- public是Java中最开放的修饰限定符,被他修饰的变量在任何地方都可以访问。
- private是Java中最严格的修饰限定符,只能在同一个包的类内部访问被private修饰的变量。
-