我包括代码的输出是很丑陋,但它只是一个代码,了解不同的事情怎么可以在Java中工作。被质疑的行标有代码下半部分的评论。引用类型
class CsTorta extends Torta{
public CsTorta retegez(CsTorta a){
....
}
public CsTorta retegez(Torta a){
System.out.println("This method"); //<-----it calls this one and not the one above
....
}
}
public class NewClass {
public static void main(String[] args) {
Torta tt=new Torta(5);
Torta tcs=new CsTorta(3);
CsTorta cs=new CsTorta(4);
System.out.println("");
System.out.println(tcs.retegez(tcs)); //The line in question uses the cstorta retegez method (marked with "This method")
}
}
虽然TCS在编码时类型是参考的类型,在运行时,当我把它识别出其一个cstorta类型tcs.retegez方法,但是这是相同的TCS参数保持引用类型(那就是为什么它使用cstorta标记的方法)。
我的问题是:我的结论是否正确:如果程序调用方法,程序只检查“真实”类型的对象,如果不是,则使用引用类型?
好吧,我做到了。 –
正确的扩展对象在Java中有点棘手,并可能导致延迟的运行时异常。 –
是的,Java雇佣了[Single-dispatch](https://www.wikiwand.com/en/Dynamic_dispatch#/Single_and_multiple_dispatch) –