内部类是定义在类内部的类,可以声明为public、private、protected。如果内部类被定义为私有和受保护的,外部类能否访问内部类的成员?内部类能否访问外部类的成员?
内部类是定义在类内部的类,可以声明为public、private、protected。如果内部类被定义为私有和受保护的,外部类能否访问内部类的成员?内部类能否访问外部类的成员?
通常情况下,您可以(访问内部类的私有字段,反之亦然)。以下代码可在Eclipse下编译:
public class Outer {
private int x;
public void f() {
Inner inner = new Inner();
inner.g();
inner.y = 5;
}
private class Inner {
private int y;
public void g() { x = 5; }
}
}
话虽如此,你可以配置你的IDE/编译器将对这些字段的访问视为错误(在Eclipse中,此设置称为“访问封闭类型的非可访问成员”,位于首选项-> Java->编译器->错误/警告->代码样式下)。
Attempt to read from field 'int com.backspace.memebook.MainActivity$MyTask.counter' on a null object reference
。 - Sagar Balyan如果内部类被定义为private或protected,外部类能访问内部类的成员吗?
可以。这些修饰符只会影响从外部类派生的类中内部类的可见性。
内部类可以访问外部类成员吗?
可以,包括声明为private
的成员,就像任何实例方法一样。
以下内容是针对常规内部类的解释[常规内部类不能在其内部声明静态成员]
你可以从内部类直接访问外部类的任何字段。
class Outer {
private static int x = 0;
class Inner {
void print() {
System.out.println(x); // x can be directly accessed
}
}
public static void main(String[] args) {
new Outer().new Inner().print();
}
}
即使外部类可以访问内部类的任何字段,但必须通过内部类的对象来访问。
class Outer {
private class Inner {
private int x = 10;
}
void print() {
Inner inner = new Inner();
System.out.println(inner.x);
}
public static void main(String[] args) {
Outer outer = new Outer();
outer.print();
}
}
是的!你可以从外部类访问内部类成员,反之亦然(无论访问修饰符如何)。但是,对于静态嵌套类,你不能仅通过字段名称访问其字段,需要像这样访问:
InnerClass.staticInnerField