我有一些代码如下:
public class java_generic { public static void main(String[] args) { T t = new X(); t.
从我的理解,在类型擦除后,课程T
将成为这样:
static class T { void m (Object e){ System.out.println("here is T"); } }
并且m超载.
有m(Object)
和m(String)
,我希望结果会是
here is T here is X
但结果是
here is T here is T
我想知道为什么结果会这样.
你几乎回答了自己的问题.你只需要完全遵循后果.擦除所有代码,你得到这个:
public class java_generic { public static void main(String[] args) { T t = new X(); t.m(new Object()); t.m(new String()); } static class T { void m (Object e){ System.out.println("here is T"); } } static class X extends T { void m (String o){ System.out.println("here is X"); } } }
这有望显然X.m
只是不会覆盖T.m
,因此通过T
引用调用永远不会调用X.m
.