内部类

内部类:一个类定义在另一个类的内部,那么该类就称作为内部类。

内部类的class文件名:外部类$内部类。好处:便于区分该 class 文件是属于哪个外部类的。

内部类的类别:

    1、成员内部类:定义在类的内部类
        
        成员内部类的访方式:
            
            方法一:在外部类提供一个方法创建内部类的对象进行访问
            
                class Outer{
                    //内部类
                    class Inner{
                        public void print(){
                            System.out.println("成员内部类的print方法");
                        }
                    }
                    
                    public void instance(){
                        Inner inner = new Inner();
                        inner.print();
                    }
                }
            
            方法二:在其他类直接创建内部类对象。格式:外部类.内部类变量名 =  new 外部类().new 内部类();
            
                Outer.Inner inner = new Outer().new Inner();
                inner.print();
                
        内部类的应用场景:
        我们在描述A事物的时候,发现描述的A事物内部还存在另外一个比较复杂的B事物,而且这个比较复杂的B事物还需要访问A事物的属性数据,那么这个时候我们就可以使用内部类描述B事物。
                    
        比如说:人 ---> 心脏
                    
        内部类的好处:内部类可以直接访问内部类的所有成员

        内部类的注意事项:
            1、如果外部类与内部类存在同名的成员变量时,在内部类中默认情况下是访问内部类的成员变量。可以通过“外部类.this.成员变量”指定访问内部类的成员。
            2、私有的成员内部类只能在外部类提供一个方法创建内部类的对象进行访问,不能再其他类创建对象。
            3、成员内部类一旦出现了静态的成员,那么该类也必须使用 static 修饰。

        注意:如果是一个静态内部类,那么在其他类创建的格式:
        外部类.内部类 变量名 = new 外部类.内部类();

        
    2、局部内部类:定义在方法的内部的类
        
        局部内部类的访问方式:
            局部内部类只能在方法的内部使用 在方法的内部 new 并调用相应的方法。
        
        局部内部类要注意的事项:
            1、如果局部内部类访问局部变量,那么该局部变量必须使用 final 修饰。
                解释:当方法执行完毕之后,方法的局部变量马上从内存中消失,而局部内部类创建的对象在方法执行完之后还没有从内存中消失,而局部内部类创建的对象中的方法调用着方法的局部变量,这个时候方法的局部变量已经消失了,那么给人感觉方法的局部变量的生命周期已经被延长了。
                
                解决方案:如果一个局部内部类访问一个局部变量的时候,那么就让给局部内部类访问这个局部变量的复制品。为了保证复制品和原来的局部变量保持一致,所以局部变量用 final 修饰。

posted @ 2016-09-23 10:33  FromNowOns  阅读(119)  评论(0编辑  收藏  举报