public class TestClass {
private class Parent {
public Object returnSomething() {
return new Object();
}
}
private class Child extends Parent {
public String returnIt() {
return (String) super.returnSomething();
}
}
private class GrandChild extends Child {
public StringBuilder returnIt() {
return (StringBuilder) super.returnSomething();
}
}
}
我的IDE抱怨子级方法与子级方法冲突。返回值类型的方法定义不同,因此我看不到它们如何冲突。
有人可以帮助我了解Java在这里不允许的内容吗?
在Java中,除非重写方法是协变返回类型,否则无法使用不同的返回类型进行方法重写。
StringBuilder
不是String
此类的子类,因此编译器不允许覆盖该方法returnIt()
public final class StringBuilder extends AbstractStringBuilder
implements java.io.Serializable, Comparable<StringBuilder>, CharSequence
因此,如果您更改returnIt()
in的返回类型Child
,它将起作用,
private class Child extends Parent {
public CharSequence returnIt() {
return (String) super.returnSomething();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句