内部类可以访问其所有实例成员,实例字段和其封闭类的实例方法。
参考如下实例 -
class Outer {
private int value = 2017
public class Inner {
public void printValue() {
System.out.println("Inner: Value = " + value)
}
} // Inner class ends here
public void printValue() {
System.out.println("Outer: Value = " + value)
}
public void setValue(int newValue) {
this.value = newValue
}
}
public class Main {
public static void main(String[] args) {
Outer out = new Outer()
Outer.Inner in = out.new Inner()
out.printValue()
in.printValue()
out.setValue(2018)
out.printValue()
in.printValue()
}
}
上面的代码生成以下结果。
Outer: Value = 2017
Inner: Value = 2017
Outer: Value = 2018
Inner: Value = 2018
示例-1
以下代码显示如何访问内部类的内部变量。
public class Main {
public static void main(String[] args) {
Outer out = new Outer()
Outer.Inner in = out.new Inner()
out.printValue()
in.printValue()
out.setValue(3)
out.printValue()
in.printValue()
}
}
class Outer {
private int value = 1
public class Inner {
private int value = 2
public void printValue() {
System.out.println("Inner: Value = " + value)
}
} // Inner class ends here
public void printValue() {
System.out.println("Outer: Value = " + value)
}
public void setValue(int newValue) {
this.value = newValue
}
}
上面的代码生成以下结果。
Outer: Value = 1
Inner: Value = 2
Outer: Value = 3
Inner: Value = 2
Inner类中的this关键字
以下代码显示如何在内部类中使用关键字 - this
。
class Outer {
private int value = 1
class QualifiedThis {
private int value = 2
public void printValue() {
System.out.println("value=" + value)
System.out.println("this.value=" + this.value)
System.out.println("QualifiedThis.this.value=" + QualifiedThis.this.value)
}
public void printHiddenValue() {
int value = 2
System.out.println("value=" + value)
System.out.println("this.value=" + this.value)
System.out.println("QualifiedThis.this.value=" + QualifiedThis.this.value)
}
}
public void printValue() {
System.out.println("value=" + value)
System.out.println("this.value=" + this.value)
}
}
public class Main {
public static void main(String[] args) {
Outer outer = new Outer()
Outer.QualifiedThis qt = outer.new QualifiedThis()
System.out.println("printValue():")
qt.printValue()
System.out.println("printHiddenValue():")
qt.printHiddenValue()
outer.printValue()
}
}
上面的代码生成以下结果。
printValue():
value=2
this.value=2
QualifiedThis.this.value=2
printHiddenValue():
value=2
this.value=2
QualifiedThis.this.value=2
value=1
this.value=1
隐藏变量
如果实例变量名称被隐藏,必须使用关键字this
或类名称以及关键字this
限定其名称。
class TopLevelOuter {
private int v1 = 100
// Here, only v1 is in scope
public class InnerLevelOne {
private int v2 = 200
// Here, only v1 and v2 are in scope
public class InnerLevelTwo {
private int v3 = 300
// Here, only v1, v2, and v3 are in scope
public class InnerLevelThree {
private int v4 = 400
// Here, all v1, v2, v3, and v4 are in scope
}
}
}
}
从外部类
以下代码显示如何从外部类引用变量。
public class Test{
private int value = 1
public class Inner {
private int value = 2
public void printValue() {
System.out.println("Inner: Value = " + value)
System.out.println("Outer: Value = " + Test.this.value)
}
} // Inner class ends here
public void printValue() {
System.out.println("\nOuter - printValue()...")
System.out.println("Outer: Value = " + value)
}
public void setValue(int newValue) {
System.out.println("\nSetting Outer&aposs value to " + newValue)
this.value = newValue
}
}