首页 > 代码库 > Java学习笔记五(内部类 )

Java学习笔记五(内部类 )

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。

Java学习笔记五(内部类 )