import java.util.*;

class Test {
   class C<T> {
        List<T> l;

        void bar(Map<T, T> t){}

        void f(T t){}

    }

    class D extends C<Integer> {
        void foo(Integer s) {
            f(s);
        }

        public void main() {
            for (Integer integer : l) {

            }
        }

        void bar(Map<Integer, Integer> t) {
            super.bar(t);
        }
    }

}