面试题58(关于Java方法参数传递的特性)

时间:2022-05-10
本文章向大家介绍面试题58(关于Java方法参数传递的特性),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

面试题58

2018年1月11日

本期题目

(单选题)下列程序输出结果是什么。?

public class Test1 {
  public static void main(String[] args) {
    Father f = new Father();
    Father c = new Child();
    System.out.println(f.getName());
    System.out.println(c.getName());
  }
}
class Father {
  public static String getName() {
    return "Father";
  }
}
class Child extends Father {
  public static String getName() {
    return "Child";
  }
}

A Father Father

B Father Child

C 编译失败

D 以上答案都不对

考点:考察求职者对Java方法参数传递特性的理解

出现频率:★★★★★

【面试题分析】

因为这两个getName方法是静态方法,所以在内存中的地址空间是固定的,根本不存在冲突的问题。也就是说,这两个方法在内存中占用了不同的空间,而具体执行哪一个,则要看是由哪个类来调用的,因为是静态方法,而且两个引用都是Father的所以只会调用Father的方法。

所以参考答案是 (A)

扩展知识:本题容易混淆,有些读者想当然选择Father Child 的输出结果(覆盖),如果是这样的结果,代码应进行如下修改

public class Test1 {
 public static void main(String[] args) {
   Father f = new Father();
   Father c = new Child();
   System.out.println(f.getName());
   System.out.println(c.getName());
 }
}
class Father {
//跟上面相比把static去掉
 public String getName() {
   return "Father";
 }
}
class Child extends Father {
//跟上面相比把static去掉
 public String getName() {
   return "Child";
 }
}