成员内部类可以随意访问外部类中的变量,而外部类不能够直接访问内部类中的变量,只有通过使用内部类对象来引用内部类的成员变量。
如果使用 this.i 的方式来调用变量,则表示这个变量是成员内部类中定义的变量。而通过使用 student.this.i 的形式调用变量时表示此时引用的是外部类的成员变量。(类student)
实例:
package innerclass;
public class OuterClass
{
public void setNo(int no)
{
this.no = no ;
}
public void print()
{
System.out.println("The Value of No is : " + this.no) ;
}
/*
* InnerClass类没有被声明为OuterClass类的一个静态成员,
* 因此除非生成了一个OuterClass对象,
* 否则无法生成任何InnerClass对象。
*/
public class InnerClass
{
public void insetNo(int no)
{
// 内部类调用外部类的方法
OuterClass.this.setNo(no) ;
}
public void inprint()
{
// 内部类调用外部类的方法
OuterClass.this.print() ;
}
}
private int no = 0 ;
}
package innerclass;
public class Test
{
public static void main(String[] args)
{
//先实例化一个外部类,然后再利用外部类实例化一个内部类生成了一个OuterClass类对象out
OuterClass out = new OuterClass() ;
//借助外部类的实例out生成了一个内部类对象in
OuterClass.InnerClass in = out.new InnerClass() ;
in.insetNo(5);
out.print() ;
}
/*
* 总之:在一个类(Test)中,创建另一个类(OuterClass)中的 非静态内部类(InnerClass)
* 必须要借助这个外部类(OuterClass)的一个实例。
* 而且这个内部类对象的声明也必须用OuterClass.InnerClass的形式。
*/
}