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

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. 温故而知新-robots.txt语法教程

    用几个最常见的情况,直接举例说明:   1. 允许所有SE收录本站:robots.txt为空就可以,什么都不要写.   2. 禁止所有SE收录网站的某些目录: User-agent: * Disall ...

  2. spark 运行架构

    spark 运行架构基本由三部分组成,包括SparkContext(驱动程序),ClusterManager(集群资源管理器)和Executor(任务执行过程)组成. 其中SparkContext负责 ...

  3. 清华大学iCenter区块链公开课 第二节

    1.比特币区块的结构 比特币区块结构: 区块大小 区块头 辕老师简版区块: 2.比特币交易结构 输入(可以有多个):比特币来源的UTXO 输出(可以有多个):手续费.接收比特币的地址 总量.锁定脚本尺 ...

  4. djangobb之forum.topics

    看djangobb源代码时,看到view的show_forum(request, forum_id, full=True)时,对于topics = forum.topics.order_by('-st ...

  5. javascript自定义简单map对象功能

    这里介绍一种js创建简单map对象的方法: function Map() { //创建object对象, 并给object对象添加key和value属性 var obj1=new Object(); ...

  6. ADOQuery.Parameters: Property Parameters does not exist

    Exception class EReadError with message 'Property Parameters does not exist'. Exception class EReadE ...

  7. sonar自定义规则

    Sonar并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方 ...

  8. C# 申请非托管内存

    方式一:使用 stackalloc 关键字 int* block = stackalloc int[100]; 注:此关键字仅在局部变量初始值设定项中有效. 以下代码导致编译器错误. int* blo ...

  9. iOS设计标注处理方法

    如果设计只给3x的设计图 在做2x适配时有几种处理方法: 按逻辑像素,大小不变,比如3x手机上一张图的逻辑像素设为24x24point,那么2x手机上这张图的大小也设为24x24point,一般适用于 ...

  10. BroadcastReceiver的使用,动态注册和注销,优先级和中断控制

    BroadcastReceiver: BroadcastReceiver(广播接收器)是Android中的四大组件之一,用来通知某些事件的相关信息,如下载完成,设置改变等. 默认的BroadcastR ...