gpt4 book ai didi

java - 方法与类型中的另一种方法具有相同的删除 - 第 2 部分

转载 作者:搜寻专家 更新时间:2023-11-01 03:37:25 25 4
gpt4 key购买 nike

我完全理解这个问题 Method has the same erasure as another method in type以及它的答案。请任何人帮助我理解以下内容?

努力消化,为什么下面的第二个代码片段会出现编译错误?

代码 1:编译正常

class Parent {
public void set(Collection<Integer> c) { }
}

class Child extends Parent {
public void set(Collection<Integer> c) {}
}

代码 2:子类中 set 方法的编译器错误。

class Parent {
public void set(Collection<?> c) { }
}

class Child extends Parent {
public void set(Collection<Integer> c) {}
}

编译错误是

Name clash: The method set(Collection) of type Child has the same erasure as set(Collection) of type Parent but does not override it

最佳答案

因为第一个示例中的代码覆盖了父对象的方法,所以您最终在子对象上使用了一个 set 方法:

 public void set(Collection<Integer> c) {}

这显然没问题。

在您的第二个示例中,您没有覆盖父类(super class)型上的方法(因为覆盖方法不是您尝试覆盖的方法的子签名)。因此,这两种方法都必须存在于子类型上。

//from parent:
public void set(Collection<?> c)

//from child:
public void set(Collection<Integer> c)

在类型删除之后,这是不可能的:

//from parent:
public void set(Collection c)

//from child:
public void set(Collection c)

关于java - 方法与类型中的另一种方法具有相同的删除 - 第 2 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26586506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com