在Java的同一类上给定两个方法:
public void doSomething( Person person );
public void doSomething( Employee employee );
哪里
Employee extends Person
如果我打电话给:
doSomething( employee )
我发现它doSomething( Person )
被调用。
我曾期望调用最接近的匹配协定而不是最抽象的过载(这就是我所发现的)
有人可以解释为什么吗?
使用了最具体的适用重载-但该重载是在 编译 时根据employee
变量的编译时类型确定的。
换一种说法:
Employee employee = new Employee();
doSomething(employee); // Calls doSomething(Employee)
但:
Person employee = new Employee();
doSomething(employee); // Calls doSomething(Person)
请注意,这与 重载 不同,在 重载 中,重要的是目标对象的 执行时间 类型。
问题内容: 我读过一本书,说如果签名相同,我可以覆盖一个方法。根据书中的方法签名是Method_Name + Parameters传递的。 根据这本书,我可以重写具有不同返回类型的方法。在Java中实际上是否可以覆盖具有不同返回类型的方法?因为我在网上进行了一些搜索,所以我发现有人说要覆盖方法,返回类型也应该相同。 根据这本书,它还说,当我们尝试重载具有相同方法名称和参数但返回类型不同的方法时,j
我读过一本书,它说我可以覆盖一个方法,如果它有相同的签名。根据这本书,方法的签名是Method_Name参数传递。 根据这本书,我可以重写具有不同返回类型的方法。在Java中,是否可以用不同的返回类型重写方法?因为我在网上做了一些搜索,我发现有人说要覆盖一个方法,返回类型也应该相同。 根据这本书,它还说,当我们试图用相同的方法名和参数重载一个方法,但返回类型不同时,java会抛出编译错误,因为签名
问题内容: 我有一个抽象类 Monitor.java ,它由类 EmailMonitor.java 子类 化 。 方法: 在 Monitor.java中 定义,并且必须在 EmailMonitor.java中 覆盖。 我目前在 EmailMonitor.java中 重写了如下方法: 但是,这会产生编译时错误: 是的子类,因此(至少在我看来)以这种方式覆盖它是很有意义的。看到编译器对我的逻辑不满意,
本文向大家介绍基于Java中参数顺序的方法重载,包括了基于Java中参数顺序的方法重载的使用技巧和注意事项,需要的朋友参考一下 在方法重载中,该类可以有多个具有相同名称的方法,但方法的参数列表不应相同。确保参数列表不同的一种方法是更改方法中参数的顺序。 演示此的程序如下所示- 示例 输出结果 现在让我们了解上面的程序。 在方法重载的实现中,使用两个方法创建PrintValues类。其中的第一个分别
问题内容: 如果有两个方法,则它们具有不同的参数,并且它们的返回类型也 不同 。像这样: 如果返回类型相同,则当然是 重载 。但是由于返回类型 不同 ,我们还可以将其视为 过载 吗? 问题答案: 考虑过载的以下几点: 在Java中重载方法的首要原则是更改方法签名。方法签名由参数数量,参数类型和参数顺序(如果它们是不同类型)组成。 } 方法的返回类型从不属于方法签名的一部分,因此仅更改方法的返回类型
我正在Java中练习一些例子。代码如下所示: 关于这一点,我没有什么问题, 1) 上面的代码使用method1(算术异常e)执行并打印null,为什么不使用异常(因为它位于层次结构的顶部)? 猜测:这是因为与异常相比,算术异常更加具体。如果是这样,为什么要问第二个问题 2) 通过在现有代码中引入以下方法,程序显示编译时异常。为什么? 帮助我学习。谢谢