首页 > Java > java教程 > 不同包中的子类可以直接访问超类的受保护成员吗?

不同包中的子类可以直接访问超类的受保护成员吗?

Susan Sarandon
发布: 2024-12-07 16:30:15
原创
716 人浏览过

Can Subclasses in Different Packages Directly Access a Superclass's Protected Members?

了解 Java 中的受保护访问

在 Java 中,protected 修饰符旨在允许访问同一包中的某些成员以及子类在其他包中。但是,当从子类外部的超类实例访问受保护成员时,会出现一个常见的误解。

考虑以下示例:

// Class A
package package1;
public class A {
    protected int protectedInt = 1;
}

// Class C
package package2;
import package1.A;
public class C extends A {
    public void go() {
        A a = new A();
        System.out.println(a.publicInt);
        System.out.println(a.protectedInt); // Eclipse underlines this line
    }
}
登录后复制

Eclipse 在 a. 行上引发错误。 protectedInt 被访问,声称它不可见。这似乎与 Java 中 protected 的定义相矛盾:“protected 修饰符指定该成员只能在其自己的包内访问(与 package-private 一样),此外,还可以由另一个包中该类的子类访问。”

解决误解

理解这种行为的关键在于 protected 的定义,因为它只适用于子类。具体来说,仅允许在子类体内访问受保护成员。

因此,可以从 C 类内部访问受保护成员 protectedInt,但仅限于 C 类本身的实例或 C 类子类的实例。即使它们位于同一个包中,也无法直接从超类的实例访问。

要解决 go 方法中的错误,您需要创建 C 类的实例A 类的:

C c = new C();
System.out.println(c.publicInt);
System.out.println(c.protectedInt);
登录后复制

这将通过子类实例正确访问受保护的成员。

以上是不同包中的子类可以直接访问超类的受保护成员吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板