Java多态面试题案例几解题思路
Posted yanpingping
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多态面试题案例几解题思路相关的知识,希望对你有一定的参考价值。
---恢复内容开始---
Java多态面试题案例几解题思路
这道题是来自别人,先开始看到题很懵,后来有自己的思路:
1 class A 2 3 { 4 5 public String show(D obj){ 6 7 return ("A and D"); 8 9 } 10 11 public String show(A obj){ 12 13 return ("A and A"); 14 15 } 16 17 } 18 19 class B extends A 20 21 { 22 23 public String show(B obj){ 24 25 return ("B and B"); 26 27 } 28 29 public String show(A obj){ 30 31 return ("B and A"); 32 33 } 34 35 } 36 37 class C extends B{} 38 39 class D extends B{} 40 41 class E 42 43 { 44 45 public static void main(String [] args) 46 47 { 48 49 A a1 = new A(); 50 51 A a2 = new B(); 52 53 B b = new B(); 54 55 C c = new C(); 56 57 D d = new D(); 58 59 System.out.println(a1.show(b)); //① 60 61 System.out.println(a1.show(c)); //② 62 63 System.out.println(a1.show(d)); //③ 64 65 System.out.println(a2.show(b)); //④ 66 67 System.out.println(a2.show(c)); //⑤ 68 69 System.out.println(a2.show(d)); // ⑥ 70 71 System.out.println(b.show(b)); //⑦ 72 73 System.out.println(b.show(c)); //⑧ 74 75 System.out.println(b.show(d)); //⑨ 76 77 } 78 79 } 80 81 (三)答案 82 83 84 85 ① A and A 86 87 ② A and A 88 89 ③ A and D 90 91 ④ B and A 92 93 ⑤ B and A 94 95 ⑥ A and D 96 97 ⑦ B and B 98 99 ⑧ B and B 100 101 ⑨ 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多态面试题案例几解题思路的主要内容,如果未能解决你的问题,请参考以下文章
Java数据结构 二叉树经典OJ面试题——刷题笔记+解题思路