1
1
问题是以下几点
不是 最重要的 这
它是 过载 而是。。。
这意味着它是一个额外的方法,而不是覆盖,并且只能通过
仅覆盖 发生 如果你有相同的方法签名,除了所谓的“协变返回”,基本上是相同的概念,但返回类型是一个子类。 |
2
0
这是一个与过载和多态性相关的问题。
编译器只能确定编译时调用的两个参数类型和函数名(因为多态性)。 所以“a1.邮票(b1);”使编译查找stampa的参数类型为ClassA中的ClassB,但ClassA没有此功能,因此参数被降级,编译查找stamp的参数类型在ClassA中为ClassA。这个函数是存在的,所以编译器在这一行中记录了一个名为stampa、参数类型为ClassA的函数应该在这里调用。 当程序运行时,a1实际上是一个ClassB对象,这个对象用名称stampa和参数类型ClassA覆盖函数。因此,最终输出为“AAA/BBB”。 请记住,重载发生在编译时,多态发生在执行时。 请不要理我蹩脚的英语。 |
3
0
这是关于 最重要的 和 过载 方法的。 方法具有 signature ,由方法名和参数类型定义,而不是参数名或返回类型。 只要签名不同,就可以在一个类上定义同名的多个方法。这就是所谓的 过载 . 如果子类使用 相同的 签名作为超类,子类是 最重要的 Java编译器确定 哪一个 方法,即要使用的方法签名。要调用的具有该签名的实际方法是在 ,具体取决于引用对象的实际类。
所以,在
编译时间
对于
在
运行时间
,引用的对象
|
4
0
据我所知,a1。stampa(b1)的结果;是“AAA/BBB”而不是“BBB”,因为当您将b1传递给stampa()时,它将被类型强制转换为超类引用,并且因为您有超类的重载方法,而重载方法的执行总是优先于子类方法,所以执行子类方法而不是超类。 |
5
0
这是
运行时多态
这是通过
重写的方法
.
首先,你甚至不能期望
现在,为什么
你的另一个问题也是如此。 要更好地理解Runtime多态性,您可以参考 https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html |