我有一个带有私有(private)字段的类,还有一个带有扩展外部类类型的泛型类型的静态抽象内部类,它试图访问外部类的私有(private)字段,但出现以下错误: - 错误:a 在 Outer 中具有私有(private)访问权限 - 错误:doSomething 在 Outer 中具有私有(private)访问权限
见下面的代码:
public abstract class Outer extends SomeOuter
{
private Object a;
private void doSomething(){}
public static absract class Inner<T extends Outer> extends SomeOuter.SomeInner<T> {
public InnerMethod(T p) {
p.a; //error: a has private access in Outer
p.doSomething() //error: doSomething has private access in Outer
}
}
}
我正在使用 jdk 1.7 进行编译
谁能告诉我为什么会出现此错误。
最佳答案
内部类
可以访问封闭类的私有(private)字段
,静态内部类
也可以访问封闭类的任何私有(private)成员。
类本身并不是真正的“static
”;没有静态类这样的东西。这
在这种情况下,static 修饰符表示嵌套类是外部类的静态成员
类(class)。这意味着它可以像其他静态成员一样被访问,而无需
外部类的一个实例。
因为是静态成员,所以可以访问外部类的私有(private)成员,因为类内部的私有(private)成员是可以访问的。
例如。
class One
{
private int i=0;
class Two
{
void go()
{
System.out.println(new One().i); //accessible
}
}
}
class two
{
private int i=3;
static class one
{
void go()
{
System.out.println(new two().i); //accessible in static class
}
}
}
但是在这里,
Inner<T extends Outer> extends SomeOuter.SomeInner<T>
T 是一个扩展 Outer 的类,并不意味着它是内部的。 这就是它给出错误的原因。
关于java - 静态抽象内部类访问外部类私有(private)字段java时编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17040549/