day33
用ai编写了一个代码,测试子类中如果调用父类中被覆盖的方法,可以用super关键字
方法覆盖要求子类和父类的方法一模一样,否则就是方法重载。
编译器是如何为多态代码生成字节码文件指令?
假设有父类Animal和子类Dog在main中执行Animal a=new Dog();a.makeSound().
尽管new出来的是dog对象,但编译器生成的字节码指令依然是调用animal的方法,并使用invokevirtual指令。
多态特性是如何实现的?
多态在底层的实现依赖于编译期的 invokevirtual 指令和运行期的动态分派。编译时只保留父类方法的符号引用;运行时,JVM 根据对象的实际类型,去该类的虚方法表(vtable)中找到被覆盖的方法实际地址,从而完成动态绑定,实现多态

浙公网安备 33010602011771号