在Java中,protected是一个访问修饰符,它用于控制类、变量、方法和构造函数的访问范围。当一个类的成员(如变量、方法或构造函数)被声明为protected时,它的访问范围受到限制,具体如下:
同一包内:在同一包内的其他类可以访问这个protected成员。
不同包的子类:在不同包中的子类可以访问这个protected成员,即使子类没有使用extends关键字继承父类,也可以通过继承关系访问。但是,如果子类位于不同的包中,并且没有继承父类,那么它将无法访问父类的protected成员。
需要注意的是,protected访问修饰符不允许不同包中的非子类访问该成员。这与public访问修饰符不同,public允许所有类访问。
下面是一个简单的例子来说明protected的作用范围:
// 文件名:Parent.java
package com.example.parent;
public class Parent {
protected String protectedVar = "I am a protected variable";
protected void protectedMethod() {
System.out.println("I am a protected method");
}
}
// 文件名:Child.java
package com.example.child;
import com.example.parent.Parent;
public class Child extends Parent {
public void accessProtectedMembers() {
System.out.println(protectedVar); // 可以访问,因为Child是Parent的子类
protectedMethod(); // 可以访问,因为Child是Parent的子类
}
}
// 文件名:SamePackageClass.java
package com.example.parent;
public class SamePackageClass {
public void accessProtectedMembers(Parent parent) {
System.out.println(parent.protectedVar); // 可以访问,因为SamePackageClass和Parent在同一包中
parent.protectedMethod(); // 可以访问,因为SamePackageClass和Parent在同一包中
}
}
// 文件名:DifferentPackageNonChildClass.java
package com.example.other;
import com.example.parent.Parent;
public class DifferentPackageNonChildClass {
public void accessProtectedMembers(Parent parent) {
// System.out.println(parent.protectedVar); // 编译错误,无法访问,因为DifferentPackageNonChildClass不是Parent的子类
// parent.protectedMethod(); // 编译错误,无法访问,因为DifferentPackageNonChildClass不是Parent的子类
}
}
在这个例子中,Parent类中的protectedVar和protectedMethod()只能在Child类和SamePackageClass类中访问,而不能在DifferentPackageNonChildClass类中访问。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。