![]() |
1
3
我想你问了两件事
让我们把这里的水分开一点… 在编译时 编译器验证代码并将其转换为字节码。静态方法调用在这个阶段得到解决,所以您知道每次调用静态方法时,都会发生相同的、唯一的实现。 运行时多态性 是在执行时发生的事情,以决定给定方法对Chosse的实际实现。考虑到层次结构中的每个类都提供了这个“多态”方法的一个实现。在窗帘后面,编译器做了大量的工作来归档这个,使用的是 后期装订 机制。
你不是真的这么说的 替换 ,inteads谈到 延伸 ,这就是你在做的事情 类扩展另一个 . 父类中方法的实现可以是 覆盖 在子类中。 超载 ,与层次结构无关,是用一组不同的参数编写相同的方法。 |
![]() |
2
1
重载是指使用相同的方法名创建多个类,但参数不同。如果一个子类具有完全相同的方法名和参数,那么不管您是否将@overwrite放在顶部,它最终都会被覆盖。它实际上是相同的,无论您如何改变方法的结果,即使您使用基类/超类作为类型。 这可能会有帮助 When do you use Java's @Override annotation and why? 如果您错误地输入了两个函数中的一个,结果没有被覆盖,那么您会让编译器抱怨您实际上没有覆盖函数,并且您会使代码更容易阅读。它不会影响结果,但出于这些原因,您仍然应该使用它。 |