在Java中,protected是一种访问修饰符,它可以用来修饰类的成员(包括变量、方法和内部类)。当一个类的成员被声明为protected时,它的访问权限受到以下限制:
同一个包内:如果其他类与这个protected成员所在的类位于同一个包内,那么这些类可以直接访问这个protected成员。
不同包内:如果其他类与这个protected成员所在的类位于不同的包内,那么只有当这些类是该protected成员所在类的子类时,才能访问这个protected成员。这里的子类可以是直接继承或者间接继承。
需要注意的是,protected访问修饰符不允许跨包访问非子类的其他类。
下面是一个简单的例子来说明protected的访问权限:
// 文件名:ProtectedExample.java
package com.example;
public class ProtectedExample {
protected int protectedVar = 10;
protected void protectedMethod() {
System.out.println("This is a protected method.");
}
}
// 文件名:SamePackageClass.java
package com.example;
public class SamePackageClass {
public void accessProtectedMembers() {
ProtectedExample example = new ProtectedExample();
System.out.println(example.protectedVar); // 可以直接访问
example.protectedMethod(); // 可以直接调用
}
}
// 文件名:DifferentPackageSubclass.java
package com.other;
import com.example.ProtectedExample;
public class DifferentPackageSubclass extends ProtectedExample {
public void accessProtectedMembers() {
System.out.println(protectedVar); // 可以直接访问,因为它是子类
protectedMethod(); // 可以直接调用,因为它是子类
}
}
// 文件名:DifferentPackageNonSubclass.java
package com.other;
import com.example.ProtectedExample;
public class DifferentPackageNonSubclass {
public void accessProtectedMembers() {
ProtectedExample example = new ProtectedExample();
// System.out.println(example.protectedVar); // 编译错误,无法访问
// example.protectedMethod(); // 编译错误,无法访问
}
}
在这个例子中,ProtectedExample类有两个protected成员:一个变量protectedVar和一个方法protectedMethod。SamePackageClass类与ProtectedExample类位于同一个包内,所以可以直接访问这些protected成员。DifferentPackageSubclass类是ProtectedExample类的子类,虽然它位于不同的包内,但仍然可以访问这些protected成员。而DifferentPackageNonSubclass类既不在同一个包内,也不是ProtectedExample类的子类,所以无法访问这些protected成员。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。