方法覆盖中的参数类型

时间:2018-05-29 02:34:06

标签: java

我可以在方法覆盖时更改参数类型吗?如果我这样做,它是否会被方法覆盖或超载?

1 个答案:

答案 0 :(得分:0)

一般来说,不是,除了一个特例。可以使用其已擦除的签名覆盖方法,如以下示例所示:

class Example {
    void m1(List<Double> arg0) {}
    <T> void m2(T arg0) {}
}
class ErasedExample extends Example {
    // erasure of m1
    @Override
    void m1(List arg0) {}
    // erasure of m2
    @Override
    void m2(Object arg0) {}
}

这在§8.4.2中注明:

  

方法m1的签名是方法m2签名的子签名,如果是:

     
      
  • m2m1具有相同的签名,或

  •   
  • m1的签名与m2签名的删除(§4.6)相同。

  •   
     

两个方法签名m1m2覆盖等效 iff m1m2m2的子签名是m1的副标记。

§8.4.8.1也是相关的。)

换句话说,如果1)方法具有相同的签名 2,则方法可以覆盖另一个方法.2)子类型方法具有超类型方法的擦除签名。