gpt4 book ai didi

java - 其他包中的派生类无法访问 protected 嵌套类

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:47 24 4
gpt4 key购买 nike

这是我想要完成的

文件 1:./net/Class1.java

package net;

public class Class1
{
protected static class Nested
{

}
}

文件 2:./com/Class2.java

package com;

import net.Class1;

public class Class2 extends Class1
{
Nested nested = new Nested();
}

这是我得到的错误

>javac ./net/Class1.java ./com/Class2.java
.\com\Class2.java:7: error: Nested() has protected access in Nested
Nested nested = new Nested();

这个错误是预期的吗?我做错了什么吗?

最佳答案

问题

一些重要的事实(许多人忘记或不知道):

  1. 默认 构造函数(包括用于静态和非静态嵌套类的构造函数)具有与其所属类的可见性相同的可见性。所以在 protected class Nested{...} 的情况下,它的默认构造函数也是 protected
  2. 具有 protected 可见性的元素只能从类访问
    • 与声明该元素的类属于同一个包,
    • 扩展(显式或隐式)声明它的类。

您的 Class2 extends Class1 因此它只能访问 Class1 的成员(包括访问 Nested 类型)。但由于它

  • 不扩展 Nested(即使是隐含的,它也只继承对它的访问,因为它是 protected)
  • 不属于与嵌套相同的包

它无法从 Nested 类(包括构造函数)访问 protected 元素。

解决方案:

要解决该问题,请通过以下任一方式创建Nested 构造函数public

  • 使用 public 修饰符显式创建 Nested 类的无参数构造函数:

    package net;

    public class Class1 {

    protected static class Nested {

    public Nested(){
    //^^^^^^
    }

    }

    }
  • 制作 Nestedpublic(它的默认构造函数也将公开 - 参见第 1 点。)

    package net;

    public class Class1 {

    public static class Nested {
    //^^^^^^
    }

    }

关于java - 其他包中的派生类无法访问 protected 嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11605388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com