`
rootjo
  • 浏览: 17267 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一道比较绕的面试题

阅读更多
朋友遇到的面试题,供大家拍砖
class Base{
void iam(Base b){
System.out.println("i am base base");
}
void iam(Child b){
System.out.println("i am base child");
}
}

class Child extends Base{
void iam(Base b){
System.out.println("i am child base");
}
void iam(Child b){
System.out.println("i am child child");
}
}

public class Test{
public static void main(String[] args) {
Base[] test = new Base[]{new Child(), new Child()};
for (int i = 0; i < test.length; i++) {
test[i].iam(test[i]);
}
}

}
分享到:
评论
4 楼 kjchen 2008-12-21  
对不起,用词不当:改为

其实做对这道题的必要条件是要理解JAVA数组声明和创建对象的语义。Base[] test = new Base[]{new Child(), new Child()}; 这条语句的意思是“声明一个名称为test,长度为2,元素类型为Base的数组,但实际向元素中赋的是Child类的对象”。这条语句等价于下面两条:
Base[] test = { new Child(), new Child() };

Base[] test = new Base[2]; (声明一个名称为test,长度为2,元素类型为Base的数组)
test[0] = new Child();(向元素中赋的是Child类的对象)
test[1] = new Child();(向元素中赋的是Child类的对象)
故下面的结果就顺理成章了:
test[0].iam(test[0])等价于Child.iam(child)
test[1].iam(test[1])等价于Child.iam(child)
所以输出
i am child base
i am child base
3 楼 kjchen 2008-12-21  
其实做对这道题的必要条件是要理解JAVA数组声明和创建对象的语义。Base[] test = new Base[]{new Child(), new Child()}; 这条语句的意思是“创建一个名称为test,长度为2,元素类型为Base的数组,但实际向元素中赋的是Child类的对象”。这条语句等价于下面两条:
Base[] test = { new Child(), new Child() };

Base[] test = new Base[2]; (创建一个名称为test,长度为2,元素类型为Base的数组)
test[0] = new Child();(向元素中赋的是Child类的对象)
test[1] = new Child();(向元素中赋的是Child类的对象)
故下面的结果就顺理成章了:
test[0].iam(test[0])等价于Child.iam(child)
test[1].iam(test[1])等价于Child.iam(child)
所以输出
i am child base
i am child base
2 楼 xieboxin 2008-12-20  
我觉得关键在于:

Base[] test = new Base[]{new Child(), new Child()};
 
这一句,因为Child 己向上转型为Base,所以,执行的是:

   
 void iam(Base b) {
		System.out.println("i am child base");
	}


因为new 的对象为Child,所以Override了父类的

 void iam(Base b) {
		System.out.println("i am child base");
	}



所以最终打印出来的是:

  i am child base
  i am child base
1 楼 tongfan 2008-12-20  
override, overload, covariance
诡异度较高的covariance.

Covariance means that the type of arguments, return values, or exceptions of overriding methods can be subtypes of the original types.
Java
Exception covariance has been supported since the introduction of the language. Return type covariance is implemented in the Java programming language version J2SE 5.0. Parameter types have to be exactly the same (invariant) for method overriding, otherwise the method is overloaded with a parallel definition instead.
编译器根据参数类型进行猜测。猜得到,它就猜。猜不到,它就让你编译不过。
上面的,编译器能猜得到。
编译器才不管你运行的时候,真正的类型是什么。
它只按字面意思理解。你定义的参数,对应的变量是什么类型。它就选什么类型。如果两个类型都匹配,那么就猜更具体的类型。
如果都猜不到,那么就让你编译不过,说你是 含糊不清,二义性,ambiguous

相关推荐

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

    云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云

    云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...

    java面试题,J2EE面试题 笔试题

    最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...

    牛客大数据面试题集锦+答案,共523道,46W+字。大厂必备

    大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...

    2023最新JAVA面试题集

    2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...

    个人面试题总结(java,数据库,前端).zip

    文件中包含了本人最近在网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该...

    (完整版)运维面试题(含答案).pdf

    (完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题...

    【BAT必备】zookeeper面试题

    【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】...

    一道关于项目整合的面试题

    一道关于项目整合的面试题

    前端面试题:前端框架面试题大全

    前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...

    【BAT必备】dubbo面试题

    【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...

    面试题 面试题面试题

    面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    ERP工程师面试题ERP工程师面试题

    ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题

    Python面试题及答案共70道.docx

    Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python...

    企业公司软件测试面试笔试题集合 软件测试面试题

    企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...

    模拟IC面试题analog面试题.doc

    本文总结了模拟IC面试题中的几个重要知识点,包括 Op-Amp 结构比较、2-stage Op-Amp 的gain 分布、极点分析、Miller 补偿原理、噪声分析和偏移误差分析等。这些知识点对于模拟IC设计和开发非常重要。

    java高级软件工程师面试题大全及答案 含一些公司面试题

    java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助

    最全的IT公司面试题集 CHM版的

    Java面试题,J2EE面试题,.net面试题,PHP面试题,数据库面试题,英语面试,外企面试,软件测试面试题,Python面试题,Oracle面试题,MySql面试题,Web开发面试题,Unix面试题,程序员面试,网络技术面试题,网络安全面试题,Linux...

Global site tag (gtag.js) - Google Analytics