内部类之一

 内部类
在一个类中定义另外一个类,这个类就叫做内部类或内置类 (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();
                 
            }

}

 内部类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();
                 
            }

}

在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明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();
*/
                 
            }

}

 

 

http://download1.csdn.net/down3/20070606/06125407847.ppt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值