在类的内部不仅可以定义属性和方法也可以定义另外一个类。如果在一个类里面定义另外一个类,那么另外的一个类被称为内部类。
内部类可以声明为 private 类型或者 public 类型。当它们声明这些权限类型的时候,和普通的属性或者方法的权限是一样的。
内部类不仅可以在类中定义,也可以在方法中定义。
标识符 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();
}
}
运行结果如下:
我们可以看到,例子中在外部类里面,直接调用内部类里面方法的时候,直接用 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();
}
}
运行结果如下:
我们发现在方法中定义内部类和在外部类中定义类似。只不过在方法中定义,只能在该方法中被调用,而在类中定义的话是可以被当前类的其他方法访问的。
从例子中,我们看到了,内部类不仅可以在类中定义,也可以在方法中定义,它们的定义方式一样。
内部类破坏了类的基本结构,一般情况下类应该只包含属性和方法。但是为什么还需要有内部类呢?因为内部类使代码更加整洁,它可以更加方便的访问外部类里面的属性。