前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题58(关于Java方法参数传递的特性)

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

作者头像
Java学习
发布2018-04-13 14:23:47
5510
发布2018-04-13 14:23:47
举报
文章被收录于专栏:java学习java学习

面试题58

2018年1月11日

本期题目

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

代码语言:javascript
复制
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 的输出结果(覆盖),如果是这样的结果,代码应进行如下修改

代码语言:javascript
复制
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";
 }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档