1.链接到外部类成员
内部类拥有所有外部类对象的访问权限。
以下为util包中Iterator接口源码:
package java.util; import java.util.function.Consumer; public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer<? super E> action) { Objects.requireNonNull(action); while (hasNext()) action.accept(next()); } }使用内部类实现Iterator功能:
package main.java.innerclass.iterator; import java.util.Iterator; public class MyList<T> { private Object[] items; private int next = 0; public MyList(int size) { items = new Object[size]; } private class Itr implements Iterator<T> { /** * 内部类中直接使用外部变量 */ @Override public boolean hasNext() { return next != items.length; } @Override public T next() { if (hasNext()) { return (T) items[next++]; } return null; } } } 2.使用.this链接到外部类 package main.java.innerclass; public class Outer { /** * 简单内部类,包可见 * * */ class Inner { private String name = "inner1"; public String toString() { return name; } /** * 获取一个新的外部类实例引用 * @return */ public Outer getNewOuter() { return new Outer(); } /** * 获取当前内部类实例所在外部类实例的引用 * @return */ public Outer getOuter() { return Outer.this; } } }