class One {
public One foo() {
return this;
}
}
class Two extends One {
public One foo() {
return this;
}
}
class Three extends Two {
public Two foo() {
return this;
}
}

如上所示的代码,按方法重写的规则来说,重写方法的返回值类型必须和父类的返回类型一样的。
但是在Three类中,我把foo方法重写后返回值类型改为Two,为什么能够正常编译没有报错?
------解决思路----------------------
"按方法重写的规则来说,重写方法的返回值类型必须和父类的返回类型一样的。"
了解下java协变返回类型你就不会这么说了