这是我正在努力实现的目标
文件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();
预计会出现此错误吗?我做错了吗?
答案 0 :(得分:10)
很少有重要事实(许多人忘记或不知道):
protected class Nested{...}
的情况下,其默认构造函数也是protected
。protected
可见性的您的Class2 extends Class1
因此只能访问Class1
的成员(包括访问Nested
类型)。但是因为它
Nested
(即使是隐式,它只会继承对它的访问权限,因为它是protected
)Nested
它无法访问protected
类(包括构造函数)中的Nested
元素。
要解决该问题,请Nested
构造函数public
。
package net;
public class Class1 {
protected static class Nested {
public Nested(){
//^^^^^^
}
}
}