查看以下代码并帮助我理解为什么“mf.display”的返回类型是Object Type。虽然“mf”是“MyFather”类型,但仍然返回类型“mf.display()”必须是整数类型
class MyFather
{
Object display()
{
System.out.println(1000);
return 1000;
}
}
class MySon extends MyFather
{
@Override
Integer display()
{
System.out.println(500);
return 500;
}
}
public class TestInheritance {
public static void main(String[] args) {
MyFather mf = new MySon();
Integer myInt = mf.display(); // Error.Type mismatch cannot convert from Object to
// Integer
}
}
答案 0 :(得分:0)
类型myFather
声明方法Object display()
,所以当你写
mf.display()
该表达式的类型为Object
。您分配给mf
的对象类型无关紧要。这是有道理的,因为mf
也可能是方法参数:
static void useFather(myFather mf) {
mf.display();
}
你可以用任何实例调用这样的方法,比如
useFather(new myFather());
不得允许代码假设它具有子类的实例。
答案 1 :(得分:0)
为了清楚讨论,我应该声明,mySon类(应该命名为MySon)覆盖myFather类的display()(再次应该命名为MyFather),因为根据Java规范,覆盖方法
The return type must be the same as, or a subtype of, the return type declared
in the original overridden method in the superclass
现在已说过让我们继续讨论,
访问对象的唯一方法是通过引用变量, 关于参考文献,还有一些要记住的关键事项。
如果您想了解有关覆盖和重载的更多信息,我认为您应该参考一些关于此主题的标准Java书籍。
干杯!