下面是整理 Java 读书笔记十五之 Java 中的内部类的完整攻略。
什么是Java中的内部类
Java中的内部类就是在一个类的内部定义另一个类。内部类可以看作是外部类的一个成员,和其他成员一样,可以被类访问控制修饰符所控制。与外部类不同的是,内部类可以直接访问外部类的成员,包括私有成员,这个特征非常有用。
Java中的内部类有如下几种形式:
形式 | 描述 |
---|---|
成员内部类 | 在类的成员位置上定义的类,最常见的一种形式。 |
静态内部类 | 在类的成员位置上且被static修饰的类。 |
方法内部类 | 在方法内部定义的类。 |
匿名内部类 | 在方法内部或代码块内部定义的一种未命名的内部类。 |
局部内部类 | 在方法内部定义并且只在该方法内部可见的类。 |
成员内部类
成员内部类,又称为普通内部类,其定义格式如下:
class Outer {
private int num;
class Inner {
public void innerMethod() {
System.out.println("inner method " + num);
}
}
public void outerMethod() {
Inner inner = new Inner();
inner.innerMethod();
}
}
从上面的代码可以看出,成员内部类 Inner 是在类 Outer 的成员位置上定义的一个类。在 Inner 类内部可以直接访问 Outer 类的成员变量和方法。如果要在外部类中使用内部类,需要先创建一个内部类的对象,然后才能访问内部类的成员方法和成员变量。
public class Main {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.innerMethod();
}
}
上述代码中,创建了一个外部类的对象,然后通过这个对象创建了一个内部类的对象,最后使用内部类的对象调用了其 innerMethod 方法。
静态内部类
静态内部类与成员内部类不同的是,静态内部类被 static 修饰,在静态内部类中不能访问外部类的非静态成员,只能访问外部类的静态成员。静态内部类定义格式如下:
class Outer {
private static int num;
static class Inner {
public void innerMethod() {
System.out.println("inner method " + num);
}
}
}
静态内部类使用方法与成员内部类类似,同样需要通过对象或类名来调用。如果通过对象调用,需要先创建一个外部类的对象;如果通过类名调用,则可以直接使用类名。
public class Main {
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner();
inner.innerMethod();
}
}
上述代码中,通过类名直接创建静态内部类的对象,然后使用内部类的对象调用了其 innerMethod 方法。
总结
Java中的内部类有五种形式,分别是成员内部类、静态内部类、方法内部类、匿名内部类和局部内部类。
- 成员内部类定义在外部类的成员位置上,可以直接访问外部类的成员变量和方法。
- 静态内部类被 static 修饰,只能访问外部类的静态成员变量和方法。
- 通过对象或类名来调用内部类,使用方法类似,但区别在于通过对象调用时需要创建一个外部类的对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:整理java读书笔记十五之java中的内部类 - Python技术站