1

1)为什么以下既不能重载也不能相互覆盖:

void meth(List<Integer> a){}
 void meth(List<String> a){}  

如果上述参数导致相同类型的擦除,为什么不能覆盖它们。
如果它们不能被覆盖,这意味着参数在某种程度上是不同的,因此如果在同一个类中则应该重载,但不是这样。那么上面不是冲突吗?

2)为什么在覆盖中显示以下行为?

a)void test(int a){}  //parent class method  
public/protected void test(int a){}  //child class method  (Overridden)



 b)void test(int a){}  //parent class method  
private void test(int a){}  //child class method (not overridden)  


c)public test(int a){}  //parent class method  
 protected void test(int a){}  //child class method (not overridden)  
4

2 回答 2

3

1- IN java - 泛型由擦除实现。这意味着两个版本的实际签名评估为

void meth(List a){}

显然,您不能在同一个类定义中拥有两个具有确切签名的方法。

2. 如果您指定,您的示例都将导致编译时错误,除了第一个错误public

于 2012-09-11T12:41:59.513 回答
1

1)。它们不能重载,因为使用空列表或空值列表将无法定义调用哪个方法。它们不能被覆盖,因为它们具有不同的签名并且受到限制。

2)。因为子方法的可见性低于父方法,并且按语言规范 - 他们不能。

于 2012-09-11T12:42:46.097 回答