Java内部类与迭代器设计

本文探讨了Java内部类的概念,包括其定义、性质及用途,强调内部类可以访问外部类的所有成员,即使是private。此外,还提到了内部类在代码组织和隐藏中的作用,特别指出在迭代器设计中,内部类的应用使得迭代器能够理解并与其外部类进行通信。


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...
		}
	}
}

总结:内部类提供里某种进入外围类的窗口


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值