内部类

内部类:
  一般我们说的内部类就是成员内部类
 
 
  作用:
    很方便调用外部类的私有数据(甚至包括私有变量);
     <-->外部类调用内部类就需要new对象了;
    原因:Java编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着;
 
 
  分类:
     静态内部类 (static修饰的成员内部类)
        Java中的静态内部类是没有了指向外部的引用,类似C++中的嵌套类;
        用法:和成员内部类差不多
        区别:<1>在测试类中创建对象格式不一样
            格式:  <外部类名>.<内部类名>对象 = new 外部类.内部类();
           <2>静态只能调用静态
            静态内部类只能调用外部类中的静态成员
     成员内部类
        位置:定义在方法外
        修饰符:四种权限都可以修饰,也可以用static修饰(此时就变成了静态内部类)
        实例化:
           格式1 : <外部类名>.<内部类名> <对象名> = new <外部类>().new<内部类>( )
           格式2: 把内部类导包 就可以声明内部类 但是new对象还是得这两步操作
        变量查找顺序: 在当前方法中寻找局部变量  
                        如果没有  继续向上寻找
                        找当前类的成员变量
                        如果没有 继续向上找
                        找到外部类的成员属性
                        如果再找不到  报错
       调用外部类的变量(内部外部变量两同名):   <外部类名>.this.<属性名>
       注意:成员内部类中不能有静态成员(否则这个类就得用static修饰,那么就变成了静态内部类)
 
        
     局部内部类 (局部变量)
       位置:定义在一个方法甚至一个代码块之内
        生命周期:随着方法调用结束而消失
         记住:匿名内部类就是局部内部类的形式之一;
        修饰符:跟局部变量一样,都不可以
        注意:局部内部类再调用局部变量时 在JDK1.8之前 局部变量要用final修饰
 
  情况:
    l 如果内部类里的一个成员变量与外部类的一个成员变量同名
       结果:外部类的同名成员变量被屏蔽了
        解决办法:外部类名.this
 
    
  
 
原文地址:https://www.cnblogs.com/lm2-1/p/8430834.html