Java内部类

Java内部类教程

在类的内部不仅可以定义属性和方法也可以定义另外一个类。如果在一个类里面定义另外一个类,那么另外的一个类被称为内部类。

内部类可以声明为 private 类型或者 public 类型。当它们声明这些权限类型的时候,和普通的属性或者方法的权限是一样的。

内部类不仅可以在类中定义,也可以在方法中定义。

Java内部类详解

语法

标识符 class 外部类名称{ //外部类相关属性和方法 标识符 class 内部类的名称{ //内部类成员 } }

参数

参数 描述
标识符 有不赋值、public 和 private 和 protected 这些类型
外部类名称 就和我们平时用的类一样,就是一个类的名字。注意类名称大写
内部类名称 我们发现在外部类的内部做了和外部类一样的事情,也定义了一个类名称,注意类名称大写
class 定义一个类的关键字

说明

内部类的定义和外部类一样,也是有标识符和名称。

案例

外部类中定义一个内部类

我们可以定义一个类,然后在类里面按照上面的语法定义一个内部类 InnerClass。

package com.haicoder.net.innerclass; public class OuterClass { private String desc = "嗨客网,测试内部类"; class InnerClass { public void print() { System.out.println(desc); } } public void dealInnerClassPrint() { new InnerClass().print(); } }

调用测试方法

package com.haicoder.net.innerclass; public class InnerClassTest { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)"); new OuterClass().dealInnerClassPrint(); } }

运行结果如下:

33 内部类定义.png

我们可以看到,例子中在外部类里面,直接调用内部类里面方法的时候,直接用 new 对象,然后调用其中的方法。最终打印出了我们想要的结果。

方法中定义一个内部类

定义一个方法,里面声明一个内部类

package com.haicoder.net.innerclass; public class OuterClass { private String desc = "嗨客网,测试内部类"; public void createInnerClassObject() { class InnerClass { public void printDesc() { System.out.println(desc); } } new InnerClass().printDesc(); } }

定义一个调用内部类的测试类

package com.haicoder.net.innerclass; public class InnerClassTest { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)"); new OuterClass().createInnerClassObject(); } }

运行结果如下:

34 内部类方法中定义.png

我们发现在方法中定义内部类和在外部类中定义类似。只不过在方法中定义,只能在该方法中被调用,而在类中定义的话是可以被当前类的其他方法访问的。

Java内部类总结

从例子中,我们看到了,内部类不仅可以在类中定义,也可以在方法中定义,它们的定义方式一样。

内部类破坏了类的基本结构,一般情况下类应该只包含属性和方法。但是为什么还需要有内部类呢?因为内部类使代码更加整洁,它可以更加方便的访问外部类里面的属性。