import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class A<T extends A<T, S>, S extends List<?>> {

	T t;
	S s;
	A<T, S> a;

	Object field = a.<T, S>getMap(t, s);

	public A() {
		<T, S>this(null, null);
	}

	public <M, N> A(M param1, N param2) {

	}

	public <M, N> Map<M, N> getMap(M key, N value) {
		return null;
	}

}

class B extends A<B, List<String>> {

	public <M, N> B(M param1, N param2) {
		<M, N>super(param1, param2);
	}

	public <M, N> Map<M, N> getMap(M key, N value) {
		B b = new <M, N>B(key, value);
		AMethod method = b::<String, String>getMap;
		AMethod method2 = super::<String, String>getMap;
		AMethod method3 = AMap<M>::<String, String>new;
		AMethod method4 = AMap<M>::<String, String>createAMap;
		return super.<M, N>getMap(key, value);
	}
}

interface AMethod {
	Map<String, String> getMap(String key, String value);
}

class AMap<T> extends HashMap<String, String> {
	public <M, N> AMap(String param1, String param2) {

	}

	public static <M, N> AMap<M> createAMap(String param1, String param2) {
		return new AMap<>(param1, param2);
	}
}