Java内部类:
定义:将一个类的定义放在另一个类的定义内部,这种类就被称为内部类。
举例:下面的代码中,Outer是外部类,Inner是内部类
public class Outer {
private int m1;
private void method() {
}
class Inner {
public int get() {
return m1; // 可以访问外部类的所有成员;
}
public Outer outer() {
return Outer.this; // 可以得到外部类对象的引用;
}
}
public static void main(String[] args) {
//Inner inner = new Outer.Inner(); // error
Outer outer = new Outer();
Inner inner = outer.new Inner(); // right,内部类对象必须依附某个外部类对象才能存在;
}
}
性质:
1. 内部类自动拥有外部类所有成员的访问权限(包括private成员)——由此可以推出,内部类对象是“依附”于某个外部类对象的,即内部类对象只能在与其外部类对象关联的情况下才能创建,在拥有外部类对象之前,是不可能创建内部类对象的。
2. 每一个类都会产生一个.class文件,内部类也必须产生一个.class文件:外围类名字,加上$,再加上内部类的名字(例子中应该为Outer$Inner.class)。
用途:代码组织和隐藏;迭代器设计(了解外部类,并能与之通信)
迭代器设计:
使用迭代器是遍历容器最常用的方法之一,常见的容器类ArrayList、Vector、Set等都提供迭代器遍历。java.util.Iterator的设计就是内部类+接口的实现方式,根据java.util.Iterator源码,给出简化代码示例:
public interface Iterator<E> {
E next();
void remove();
boolean hasNext(); // 接口中的方法默认的就是 public abstract
}
public class ArrayList<E> {
//自定义一些成员变量和方法;
//返回迭代器
public Iterator<E> iterator(){
return new Itr();
}
//内部类Itr可以访问外部类的所有成员;
//根据外部类的成员变量的值,实现hasNext、next、remove三个函数;
public class Itr implements Iterator<E>{
public boolean hasNext(){
//do something...
return true;
}
public E next(){
//do something...
return null;
}
public void remove(){
//do something...
}
}
}总结:内部类提供里某种进入外围类的窗口
本文探讨了Java内部类的概念,包括其定义、性质及用途,强调内部类可以访问外部类的所有成员,即使是private。此外,还提到了内部类在代码组织和隐藏中的作用,特别指出在迭代器设计中,内部类的应用使得迭代器能够理解并与其外部类进行通信。
2万+

被折叠的 条评论
为什么被折叠?



