为什么最后输出的是“WuffRingding”而不是“RingdingRingding”?
package ubung;
class Hund{
public Hund(){
}
public String bellen(){
return "Wuff";
}
public String spielen(Hund h){
return "Wuff" + h.bellen();
}
}
class Fuchs extends Hund{
public Fuchs(){
}
public String bellen(){
return "Ringding";
}
public String spielen(Fuchs f){
return "Ringding"+ f.bellen();
}
}
public class park {
public static void main(String[] args){
Hund bello = new Hund();
Fuchs foxi = new Fuchs();
Hund hybrid = new Fuchs();
System.out.println(hybrid.spielen(foxi));
}
}
为什么最终输出是“颤动”而不是“振铃”?为什么最终输出是“颤动”而不是“振铃”?
输出为<code>WuffRingding</code>,因为方法<code>public String spilen(Hund h)</code>在子类<code>Fuchs</code>中被重载到<code>public String spien(Fuchs f)</ccode>。当方法重载时,Java调用类型的方法,而不是实际实例的方法。
因此,这里使用的类型是混合
变量的 Hund
,并且由于要调用的方法是在编译时为重载方法决定的,因此调用 Hund
类的重载方法,尽管它指向 Fuchs
实例。
现在你提供了一个 Fuchs
实例作为参数提供给 spielen(Hund h),
它清楚地将 Hund
类型作为参数,这工作为 Hund
是 Fuchs
的父级并且可以保存 Fuchs
引用,这与运行时/动态多态性相结合,调用 Fuchs
类的 bellen
方法而不是 Hund
因为在运行时,会检查实例的类型,并且它实际上指向 Fuchs
的实例。
太长,读不下去了
Hund
引用上调用spilen
,在重载时调用Hund
类的
>
问题内容: 我有一个C类。E类对此进行了扩展。 为什么是 经过进一步审查:尽管数字转换的语法与转换对象的语法相同,但仍引起一些混淆。无论如何,上面的代码没有给出编译结果,而是给出了运行时错误- 因此,在某些情况下,可以将类强制转换为子类(否则,代码将无法编译)。任何人都可以给出上述工作原理的例子吗? 并且: 给。这是为什么?它被铸造成更一般的! 假设我在M和K中都实现了doIt()方法。 给M或K
他是两个家伙。我需要你的帮助。 我对laravel/Elount/relation中的逻辑和最佳实践有三个问题。 第一种情况 我有四个模型/桌子。 逻辑问题: 我的想法是给数据透视表两个附加的列(与数据透视('user_id','comment_id')) *)第一个问题:我怎样才能实现这个构想? 第二种情况第二个问题与第一个问题相同,但在这些情况下,我如何访问“评论”,而不是使用hasone/b
我在pset3(cs50)中做tideman问题,但是我不能区分我的程序和函数look_pairs的正确程序之间的区别。 这是我的程序,我在正确的程序之间做了一点区别。我没有判断makeCycle(winner,I)的返回,而是返回这个函数,你可以在我的代码中看到区别。 这是正确的版本,但我认为我的程序和正确的版本是一样的,我不知道为什么我的程序会造成这个错误。
为什么我会得到这个错误?为什么尽管导入了junit断言,我还是不能编写而是必须编写?为什么我不能使用mockito中的(message is不能解析'currencyexchange_logictest'中的方法'when')。是不是因为依赖关系,它们出了什么问题?
使用FIXED_WINDOW算法时,"validDuration","MaxAmount"参数是什么意思?
本文向大家介绍关于Java三大特性之多态的总结,包括了关于Java三大特性之多态的总结的使用技巧和注意事项,需要的朋友参考一下 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 1.定义: 多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)