Java 无法在子类中创建返回类型对象的方法
我是一名Java初学者,在学习过程中遇到了这个程序 一班是超级班。第二类扩展一类,第三类扩展二类Java 无法在子类中创建返回类型对象的方法,java,oop,Java,Oop,我是一名Java初学者,在学习过程中遇到了这个程序 一班是超级班。第二类扩展一类,第三类扩展二类 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; } } 在第三类中,当我创建返回类型为2
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;
}
}
在第三类中,当我创建返回类型为2的方法foo时,没有编译错误,但是当我创建返回类型“Object”时,出现编译错误,如下所示
class Three extends Two {
public Object foo() {
return this;
}
}
据我目前所知,Object是所有类的超类。为什么我不能在子类中创建一个返回类型为“Object”的方法呢?它失败了,因为返回的类应该是一个
One
或其子类(例如aTwo
),而该子类保证也是One
;它不是一个超类(如对象
),就编译器所知,它可以是一个超类
class Three extends Two {
public Two foo() { // works because Two is a subclass of One
return this;
}
}
但是
如果您对co-variant
返回类型有一个想法,而重写
的概念出现了,那么您必须知道,在child类中,重写方法必须返回
与super
类方法包含的类型相同,或者是任何子类
(共变量类类型)
注意:-在此代码中,您返回的是一个对象
类。它是所有类的超级
类,而不是子类,因此它是一种用于编译的非法代码
你可以试试这个
class Three extends Two {
public Two foo() { // works because Two is a subclass of One
return this;
}
}
或
两者都可以。根据您的需要使用。谢谢您为什么要回滚我所做的编辑?会引入拼写错误、格式错误、噪音等?您知道堆栈溢出是如何工作的,对吗?鼓励每个人改进帖子?
class Three extends Two {
public Object foo() {
return this;
}
}
class Three extends Two {
public Two foo() { // works because Two is a subclass of One
return this;
}
}
class Three extends Two {
public Three foo() { // works because Three is a subclass of Two & One
return this;
}
}