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。