内部类
在一个类中定义另外一个类,这个类就叫做内部类或内置类 (inner class) 。
内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类(outer class)来控制内部类的可见性。
当我们建立一个inner class时,其对象就拥有了与外部类对象之间的一种关系,这是通过一个特殊的this reference形成的,使得内部类对象可以随意的访问外部类中所有的成员。
class
Out
... {
private int index=100;
class Inner
...{
private int index=50;
public void print()
...{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
}
}
public void print()
...{
Inner inn=new Inner();
inn.print();
}
}
class OutTest
... {
public static void main(String[] args)
...{
Out out=new Out();
out.print();
}
}
... {
private int index=100;
class Inner
...{
private int index=50;
public void print()
...{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
}
}
public void print()
...{
Inner inn=new Inner();
inn.print();
}
}
class OutTest
... {
public static void main(String[] args)
...{
Out out=new Out();
out.print();
}
}
内部类INNER可以看成是OUT类的一个成员变量,MAIN是一个静态的方法,静态方法内部不可以实例化成员变量
class
Out
... {
private int index=100;
class Inner
...{
private int index=50;
public void print()
...{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
}
}
public void print()
...{
Inner inn=new Inner();
inn.print();
}
Inner getInner()
...{
return new Inner();
}
/** *//**public static void main(String[] args)
{
Out out=new Out();
Inner inn=out.getInner();//因为Inner是在Out内部的,是可见的
//Inner inn=new Inner();内部类INNER可以看成是OUT类的一个成员变量,
//MAIN是一个静态的方法,静态方法内部不可以实例化成员变量
inn.print();
}*/
}
class OutTest1
... {
public static void main(String[] args)
...{
Out out=new Out();
//out.print();
Out.Inner inn=out.getInner();//因为Inner是在Out内部的,是不可见的
inn.print();
}
}
... {
private int index=100;
class Inner
...{
private int index=50;
public void print()
...{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
}
}
public void print()
...{
Inner inn=new Inner();
inn.print();
}
Inner getInner()
...{
return new Inner();
}
/** *//**public static void main(String[] args)
{
Out out=new Out();
Inner inn=out.getInner();//因为Inner是在Out内部的,是可见的
//Inner inn=new Inner();内部类INNER可以看成是OUT类的一个成员变量,
//MAIN是一个静态的方法,静态方法内部不可以实例化成员变量
inn.print();
}*/
}
class OutTest1
... {
public static void main(String[] args)
...{
Out out=new Out();
//out.print();
Out.Inner inn=out.getInner();//因为Inner是在Out内部的,是不可见的
inn.print();
}
}
在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明final。
内部类可以声明为private或protected;还可以声明为abstract或final。
内部类可以声明为static的,但此时就不能再使用外部类的非static的成员变量和非static的成员方法;
非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员。
class
Out
... {
private int index=100;
void fn(final int a)//方法内部的内部类无法供该方法外的函数访问
...{
final int b=0; 局部变量a,b需要被内部类访问的话,必须声明为final
/** *//**class Inner//方法内部的内部类
{
private int index=50;
public void print()
{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
}
}*/
/** *//**if()//条件语句中的内部类
{
class Inner
{
private int index=50;
public void print()
{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
}
}
} */
if(true)//条件语句中的内部类
...{
...{//语句快当中的内部类
class Inner
...{
private int index=50;
public void print()
...{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
System.out.println(a);
System.out.println(b);
}
}
}
}
if(true)//条件语句中的内部类
...{
class Middle
...{//语句快当中的内部类
private int index=60;
class Inner
...{
private int index=50;
public void print()
...{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Middle.this.index);
System.out.println(Out.this.index);
}
}
}
}
}
public void print()
...{
}
}
class OutTest3
... {
public static void main(String[] args)
...{
Out out=new Out();
/** *//** Out.Inner inn=out.new Inner();
inn.print();*/
}
}
... {
private int index=100;
void fn(final int a)//方法内部的内部类无法供该方法外的函数访问
...{
final int b=0; 局部变量a,b需要被内部类访问的话,必须声明为final
/** *//**class Inner//方法内部的内部类
{
private int index=50;
public void print()
{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
}
}*/
/** *//**if()//条件语句中的内部类
{
class Inner
{
private int index=50;
public void print()
{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
}
}
} */
if(true)//条件语句中的内部类
...{
...{//语句快当中的内部类
class Inner
...{
private int index=50;
public void print()
...{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Out.this.index);
System.out.println(a);
System.out.println(b);
}
}
}
}
if(true)//条件语句中的内部类
...{
class Middle
...{//语句快当中的内部类
private int index=60;
class Inner
...{
private int index=50;
public void print()
...{
int index=30;
System.out.println(index);
System.out.println(this.index);
System.out.println(Middle.this.index);
System.out.println(Out.this.index);
}
}
}
}
}
public void print()
...{
}
}
class OutTest3
... {
public static void main(String[] args)
...{
Out out=new Out();
/** *//** Out.Inner inn=out.new Inner();
inn.print();*/
}
}
http://download1.csdn.net/down3/20070606/06125407847.ppt