zoukankan      html  css  js  c++  java
  • 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 字符串截取
    字符编码Unicode-正则表达式验证
    APP数据加密解密
    ThreadLocal线程局部变量
    用Eclipse进行远程Debug代码
    JPA对应关系
    JPA名称规则
    dubbo环境搭建
    历史表更新数据
    api加密算法
  • 原文地址:https://www.cnblogs.com/yanpingping/p/10538561.html
Copyright © 2011-2022 走看看