Java 具有不同返回类型的多态性中的重写函数
看一下下面的代码,帮助我理解为什么mf.display的返回类型是Object type。虽然mf是MyFather类型,但mf.display的返回类型必须是整数类型Java 具有不同返回类型的多态性中的重写函数,java,Java,看一下下面的代码,帮助我理解为什么mf.display的返回类型是Object type。虽然mf是MyFather类型,但mf.display的返回类型必须是整数类型 class MyFather { Object display() { System.out.println(1000); return 1000; } } class MySon extends MyFather { @Override Intege
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
}
}
myFather类型声明了一个方法对象显示,因此当您编写
mf.display()
该表达式的类型为Object。指定给mf的对象类型并不重要。这是有意义的,因为mf也可能是一个方法参数:
static void useFather(myFather mf) {
mf.display();
}
您可以对任何实例调用这样的方法,例如
useFather(new myFather());
不允许代码假定它有子类的实例。为了讨论的清楚,我应该声明,应该命名为mySon的mySon类重写了myFather类的显示,应该再次命名为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
现在我们继续讨论
访问对象的唯一方法是通过引用变量,
关于参考资料,有一些关键的事情需要记住
引用变量的类型决定了可以在上调用的方法
变量所引用的对象。这对您理解很重要
引用变量只能是一种类型,一旦声明,该类型即为该类型
即使它引用的对象可以更改,也不能更改。
引用是一个变量,因此可以将其重新分配给其他对象,除非
引用被声明为最终引用。
引用变量可以引用与声明变量类型相同的任何对象
引用,或者这是一个大的引用,它可以引用
声明类型!这就是你通过写myFather mf=new mySon所做的事情;
引用变量可以声明为类类型或接口类型。如果
变量被声明为接口类型,它可以引用任何类型的任何对象
实现接口的类。
我认为,如果您想了解有关重写和重载的更多信息,您应该参考一些关于这个主题的标准Java书籍
干杯 因为您的变量mf是myFather,返回类型不被覆盖。请遵守Java命名约定-它们不是可选的。类是用CamelCase编写的,从一个大写字母开始,您会注意到代码看起来也更好,因为SO语法检测突出显示了名称:-通常称为PascalCase,而不是CamelCase@SBI实际上这是我第一次听到这个名字,通常我们用大写和小写,但我确实喜欢它:谢谢Marko。我得到了它。