当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播

我来了!

拥有积分:3904
尚学堂雄起!!威武。。。

博客分类

笔记中心

课题中心

提问中心

答题中心

解答题中心

Java学习笔记五(内部类 )

我来了! 发表于 2年前 (2014-11-28 22:30:29)  |  评论(0)  |  阅读次数(318)| 0 人收藏此文章,   我要收藏   

1 内部类的优缺点

  在一个类的内部还存在另外一个类,则成为内部类。内部类可以是public 或者private,对其访问的控制与类的成员变量和 成员方法相同。

  内部类的缺点:内部类其实严重破坏了良好的代码结构

  内部类的优点:方便的访问外部类中的私有属性;将内部类拿到外部之后,代码会增加,复杂度也会增加;

2 基本的内部类结构

class Outer{
    
    private String info = "Hello outer inner class";
    
    class Inner{
        public void print(){
            System.out.println(info);
        }
    }
    
    public void fun(){
        System.out.println("Outer class fun");
        new Inner().print();
    }
}


public class InnerDemo {
    
    public static void main(String [] args){
        
        //定义内部类
        Outer.Inner in = null;
        in =new Outer().new Inner();
        in.print();
        new Outer().fun();
        new Outer().new Inner().print();
    }

}

特点分析:定义内部类的时候必须指定所属的外部类;必须先实例化外部类,才能实例化内部类;

3 static 声明的内部类

class Outer{

    private static String info = "Hello outer class";
    static class Inner{
        public void print(){
            System.out.println(info);
        }
    };
    
    public void fun(){
        new Inner().print();
    }
    
}

public class InnerDemo{

    public static void main(String []args){
        
        //定义方式
        Outer.Inner in = null;
    //    in = new Outer().new Inner();// 错误的方式
        
        in = new Outer.Inner();
        
        in.print();
        new Outer.Inner().print();
}
}

特点分析:可以直接通过外部类.内部类直接访问,具有一定的局限性,内部类只能访问外部类的静态数据成员。

4私有内部类 

class Outer{

    private  String info = "Hello outer class";
    private class Inner{
        public void print(){
            System.out.println(info);
        }
    };
    
    public void fun(){
        new Inner().print();
    }
    
}

public class InnerDemo{

    public static void main(String []args){
        
        /*定义方式错误
        Outer.Inner in = null;
        
        in = new Outer().Inner();
        in.print();
        */
        
        new Outer().fun();
}
}

特点分析:如果一个内部类只希望被外部类进行访问,可以使用private来声明内部类;必须在外部类中生成内部类进行操作,不能使用new Outer().new Inner()进行定义。

5 在类的方法中定义的内部类

class Outer{
    private String info = "Hello outer class";
    
    //无参数的方法
    public void fun(){
        class Inner1{
            public void print(){
                System.out.println(info);
            }
        }
        
        new Inner1().print();
    }
    
    //有参数的方法
    public void fun(final String str){
        class Inner2{
            public void print(){
                System.out.println(info);
                System.out.println(str);
            }
        }
        
        new Inner2().print();
    }
    
};

public class InnerDemo{
    
    public static void main(String []args){
        new Outer().fun();
        new Outer().fun("zhang");
    }
}

特点分析:在外部类的方法中生成一个内部类去调用内部类中的方法;如果外部类的方法中需要传递参数,参数的类型必须为final。

分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183