一道Java面试题,个人认为,静态类型的方法是因为它的外观类型决定的(也就是Parent)。
静态的方法是非虚方法(Java中的非虚方法有private,final,static,构造器,非虚方法无需根据具体的对象遍历方法区的方法表,决定调用关系)
也就是说,对于静态类型方法的调用,是其声明类型的,如Parent c = new Child(); Parent便是其外观类型(声明类型),故调用的便是Parent类型的静态方法。
package com.jue.test;
class Parent{
public static void display(){
System.out.println("Parent->display");
}
}
class Child extends Parent{
public static void display(){
System.out.println("Child->display");
}
}
public class MainTest {
public static void main(String[] args) {
Parent c = new Child();
c.display();
}
}result: Parent->display
为了验证这个,我可以把Parent的 public static void display()方法去掉,则会编译错误。
本文探讨了Java中静态方法的调用原理,通过实例解释了如何根据声明类型而非实际类型来确定调用哪个静态方法。
176万+

被折叠的 条评论
为什么被折叠?



