---恢复内容开始---

Java多态面试题案例几解题思路

这道题是来自别人,先开始看到题很懵,后来有自己的思路:

 class A

 {

         public String show(D obj){

                return ("A and D");

         }

         public String show(A obj){

                return ("A and A");

         }

 }

 class B extends A

 {

         public String show(B obj){

                return ("B and B");

         }

         public String show(A obj){

                return ("B and A");

         }

 }

 class C extends B{}

 class D extends B{}

 class E

 {

       public static void main(String [] args)

      {

        A a1 = new A();

        A a2 = new B();

        B b = new B();

        C c = new C();

        D d = new D();

        System.out.println(a1.show(b));   //①

        System.out.println(a1.show(c));   //②

        System.out.println(a1.show(d));   //③

        System.out.println(a2.show(b));   //④

        System.out.println(a2.show(c));   //⑤

        System.out.println(a2.show(d));  // ⑥

        System.out.println(b.show(b));    //⑦

        System.out.println(b.show(c));    //⑧

        System.out.println(b.show(d));    //⑨   

       }

 }

 (三)答案

              ①   A and A

              ②   A and A

              ③   A and D

              ④   B and A

              ⑤   B and A

              ⑥   A and D

              ⑦   B and B

              ⑧   B and B

              ⑨   A and D

思路:

解题口诀:

  • 成员变量:编译看左,运行看左(因为无法重写);

  • 成员方法:编译看左,运行看右(因为普通成员方法可以重写,变量不可以);

  • 静态方法:编译看左,运行看左(因为属于类);

  第一个:在A类中找show(B),然而没有B类对象作为参数方法,就找B的上个类,就 找到A类中有一个show(A)方法,所以是AA

  第二个:在A类中找show(C),然而没有C类对象作为参数方法,但是A类 为C 的父类的父类,所以打印AA

  第三个:因为其中有D类对象作为参数的方法,所以输出AD

  第四个:父类引用指向子类对象,首先调用的是 对象的方法 也就是B类中的,又因为B类中

向上转型,它只能访问父类中拥有的方法和属性,而对于不存在的方法,不能使用,意思就是只能使用重写的方法或者父类的方法。所以是BA;

  第五个:虽然 C类继承B类 ,但是只能调用父类中存在的方法,没有以C类对象作为参数的方法,所以只能将C类作为A类,所以也是BA

  第六个:因为父类中 直接有D作为参数的方法,所以 AD

  第七个:调用B类中以B类对象所谓参数的方法,所以BB

  第八个: 因为A B C 类中都没有 以C类对象作为参数的方法,所以C类变为B类,在B类中有 以B类作为参数的方法,(注:如果这点还找不到的话,就会将C类看做A类)并且执行B类的 BA, 为什么不是AA呢 因为覆盖掉了

  第九个:以D 对象作为参数的方法 存在,所以执行A类的show(D)方法

Java多态面试题案例几解题思路的更多相关文章

  1. n皇后2种解题思路与代码-Java与C++实现

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进 ...

  2. 第七届(16年)蓝桥杯java B组决赛真题 愤怒的小鸟 解题思路

    愤怒小鸟 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车间相距 1000 米两火车 (不妨称A和B) 以时速 10米/秒 相对行驶. 愤怒的小鸟从A车出发,时速50米/秒,撞向B车,然后返回去撞 ...

  3. Java高级面试题解析(一)

    最近,在看一些java高级面试题,我发现我在认真研究一个面试题的时候,我自己的收获是很大的,我们在看看面试题的时候,不仅仅要看这个问题本身,还要看这个问题的衍生问题,一个问题有些时候可能是一个问题群( ...

  4. 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

    剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()- ...

  5. java必背面试题

    JAVA必背面试题和项目面试通关要点 一 数据库 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链接查询和优化问题,手写SQL语句,例如四个球队比赛,用SQL显示所有比赛组合:举例2:选 ...

  6. 一份最贴近真实面试的Java基础面试题

    这是一份Java基础知识的面试题.在网上的关于Java的面试题数不胜数,但认真看过感觉大多数都没有实用性,有很多是面试官根本就不会问到的,那些已经脱离了实际开发的技术问题.而这份资料来源自一份个人觉得 ...

  7. Java基础面试题集(一)

    Java基础面试题 一.面向对象编程(OOP) 7 二.常见的Java问题 7 2.1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 7 2.2.JDK和JRE的区别是什么? ...

  8. Java基础面试题(史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  9. Java算法面试题(史上最强、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

随机推荐

  1. 不用MathType, 如何在Mac Word中插入公式

    不用MathType, 如何在Mac Word中插入公式 找了好久都找不到MathType的破解版,不得不使用免费清爽的MarkDown编辑工具Typora_for_Mac. 我是很喜欢Typora的 ...

  2. ROS学习手记 - 7 创建ROS msg & srv

    至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理. 本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ff ...

  3. Ruby学习笔记3:Rendering(渲染)和 Redirect(重定向)

    1. Rendering Rendering 是特别要告诉Controller 中的methods,要哪个view file来显示给用户.We can show Views as we wish! E ...

  4. 29.如何不用 transition 和 animation 也能做网页动画

    原文地址:https://segmentfault.com/a/1190000014964220 感想:动画效果运用了具有滚动效果的marquee标签 HTML代码: 注释:  <!-- mar ...

  5. ELK测试安装

    https://blog.csdn.net/guyan0319/article/details/78749639 https://www.cnblogs.com/frankdeng/p/9139035 ...

  6. PHP微信公共号H5支付。

    1.接受支付信息. /** * 发起支付请求 * @return [type] [description] */ function pay($openid){ $nonce_str = $this-& ...

  7. Android dialog使用

    翻译自:开发->API 指南->User Interface & Navigation->Dialogs 注意: dialog是一个基类,但是我们应该尽可能避免直接使用dia ...

  8. 选择、操作web元素

    11月1日 什么是web元素 Selenium自动化主要就是:选择界面元素,操作界面元素(输入操作:点击.输入文字.拖拽等,输出操作:获取元素的各种属性),根据界面上获取的数据进行分析和处理 选择元素 ...

  9. Redis 密码

  10. tfs对接数据-File

    在使用tfs时,数据结构 /** * getFile */ @RequestMapping("/tfs/{fileName}") public ResponseEntity< ...