面试题 —— 面向对象

1. 举一个内部类的实例(jdk 中)

  • java Collection 容器的 iterator() 成员函数的实现,比如 ArrayList 内部的 iterator 的实现:

    public class ArrayList<E> {
    
        public Iterator<E> iterator() {
            return new Itr();
        }
        // 实现了 Iterator 接口的内部类
        private class Itr implements Iterator<E> {
            public boolean hasNext() {
                return cursor != size;
            }
            public E next() {
                ...
            }    
        }
    }
  • Arrays.asList

    public class Arrays {
        public static <T> List<T> asList(T... a) {
            return new ArrayList<>(a);
        }
        // 这里的 ArrayList 是内部类,未重写 AbstractList 的 add 等会修改内部状态的方法,
        // Arrays.asList 返回的内部类实例,仅用来显示和查看,而不能修改;
        private static class ArrayList<E> extends AbstractList<E> {
    
        }    
    }

    AbstractList 的 add 方法为:

        public void add(int index, E element) {
            throw new UnsupportedOperationException();
        }

    因此 Arrays.asList() 返回得到的内部类实例,仅用来显示和查看,而不能修改;

猜你喜欢

转载自blog.csdn.net/lanchunhui/article/details/81106892