// FirstSecondThird.java
class First
{
int firstVar = 1;
public void firstFn()
{
System.out.println("in firstFn firstVar = " + firstVar);
System.out.println(First.this.getClass().toString()); // 内部类有指向外围类的指针,反之不可
//System.out.println(First.Second.this.getClass().toString()); // 尝试访问内部类的this指针
//System.out.println(First.Second.Third.this.getClass().toString()); // 尝试访问内部类的this指针
}
class Second
{
int secondVar = 2;
public void secondFn()
{
System.out.println("in secondFn firstVar = " + firstVar);
System.out.println("in secondFn secondVar = " + secondVar);
System.out.println(First.this.getClass().toString());
System.out.println(First.Second.this.getClass().toString());
//System.out.println(First.Second.Third.this.getClass().toString()); // 尝试访问内部类的this指针
}
class Third
{
int thirdVar = 3;
public void thirdFn()
{
System.out.println("in thirdFn firstVar = " + firstVar);
System.out.println("in thirdFn secondVar = " + secondVar);
System.out.println("in thirdFn thirdVar = " + thirdVar);
System.out.println(First.this.getClass().toString());
System.out.println(First.Second.this.getClass().toString());
System.out.println(First.Second.Third.this.getClass().toString());
final int fourthVar = 4; // 注意必须final,否则编译不过
class Fourth // 方法中的内部类相当于方法中的一个局部变量,如此的缩小了它的作用域,以至于不应该在它本类以外的类来使用(甚至本类也不需要,只需要在此方法中访问),故你无法在其它类中定义这个类并尝试实例化,事实上不需要在其它类中定义,否则相当于扩大了内部类的作用域,与设计此类的初衷相违背。
{
public void fourthFn()
{
System.out.println("in fourthFn fourVar = " + fourthVar); // can't access , unless the variety is final
}
}
new Fourth().fourthFn();
}
}
}
}
public class FirstSecondThird
{
public static void main(String [] args)
{
First first = new First();
first.firstFn();
First.Second second = first.new Second();
second.secondFn();
First.Second.Third third = second.new Third();
third.thirdFn();
}
}
方法中的内部类只能访问final类型的变量
最新推荐文章于 2022-08-09 08:16:58 发布