public interface Expression {
}
public interface ArithmeticExpression extends Expression {
}
public class StaticMethodDemo {
public static void print(Expression e) {
System.out.println("StaticMethodDemo");
}
public static List<Expression> convert(
Collection<? extends Expression> input) {
return null;
}
}
public class StaticMethodChild extends StaticMethodDemo {
public static void print(ArithmeticExpression e) {
System.out.println("StaticMethodChild");
}
public static List<ArithmeticExpression> convert(
Collection<? extends ArithmeticExpression> input) {
return null;
}
}
上記のコードは Java 5 ではコンパイルされますが、Java 7 ではコンパイルされないのはなぜですか? Java 7では、「名前の衝突:タイプStaticMethodChildのメソッドconvert(Collection)には、タイプStaticMethodDemoのconvert(Collection)と同じ消去がありますが、非表示にはなりません」