多态经典面试题解析
来源:互联网 发布:英伟达驱动游戏优化 编辑:程序博客网 时间:2024/06/03 18:07
多态经典面试题
已知类ABCD,B继承于A,C和D继承于B,具体如下
public class A {public void print(A a){System.out.println("A and A");}public void print(D d){System.out.println("A and D");}}
public class B extends A{public void print(B b){System.out.println("B and B");}public void print(A a){System.out.println("B and A");}/*//继承的public void print(D d){System.out.println("A and D");}*/}
public class C extends B{public void print(C c){System.out.println("C and C");}public void print(A a){System.out.println("C and A");}/*//继承的public void print(D d){System.out.println("A and D");}public void print(B b){System.out.println("B and B");}*/}
public class D extends B{public void print(D a){System.out.println("D and D");}public void print(A a){System.out.println("D and A");}/*//继承的public void print(B b){System.out.println("B and B");}*/}题目如下:
public class Main {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();a1.print(b);//A and Aa1.print(c);//A and Aa1.print(d);//A and Da2.print(c);//B and Aa2.print(c);//B and Aa2.print(d);//A and Db.print(b);//B and Bb.print(c);//B and Bb.print(d);//A and Dd.print(b);//B and Bd.print(c);//B and Bd.print(d);//D and D}}结果已经备注在上面
针对这个题目,绝大多数人的解题思路是这样的,搞一个优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)
除了上面这个思路,其实我们同样可以从继承和多态的本质出发,进行解析:
1,子类继承父类,则默认继承父类的非私有方法,如上述代码,注释里面是隐式继承的部分;
2,C\D继承于B,B继承于A,则C的对象默认不仅属于C类,也属于B类,也属于A类,即,狗不仅属于犬类,也同样属于动物类;
3,子类继承父类, 可以覆写父类的方法;
依据以上三点,可以轻松解题:
比如:
a2.print(c)a2是A类型的对象,程序执行时会优先到A类里面去找print方法,同时c属于C类型,同样c也是B类,也是A类。则找到A的print(A a)方法
与此同时,a2引用的是B类型的实例化,被父类定义,实际执行时,A中的print(A a)会在B类中被覆写(这里就是多态),即实际执行的是B中的print(A a),得到“B and A”;
例2:
b.print(d);//A and Db是B类型的对象,所以在B类中找print(D d)方法,结果发现了从A类中继承过来的print(D d)方法,直接调用,得到“A and D”
其他题目,以照这种方法分析,就能得到相应的答案。
0 1
- 多态经典面试题解析
- 多态经典面试题解析
- 多态经典面试题
- 100多道经典的JAVA面试题及答案解析
- 100多道经典的JAVA面试题及答案解析
- 100+经典Java面试题及答案解析
- 100+经典Java面试题及答案解析
- 100+经典Java面试题及答案解析
- 一些经典面试题的思考与解析
- 100道Java经典面试题及答案解析
- 免费视频教程:java经典面试题深度解析
- java经典面试题深度解析免费视频教程分享
- 免费视频教程分享 :java经典面试题深度解析
- 关于js原型的经典面试题解析
- 免费视频教程:java经典面试题深度解析
- 100+经典Java面试题及答案解析
- 【单链表经典面试题解析四】用单链表实现约瑟夫环
- 100+经典Java面试题及答案解析
- Android百度地图定位收索取周边在列表中展示并选择
- MapReduce job Shuffle 过程的ERROR
- OKhttp的回调的代码
- 【Android】Toast控件使用
- lightoj 1369 - Answering Queries 数学
- 多态经典面试题解析
- 杭电1012
- 剑指offer 66 机器人的运动范围
- SpringMvc 上传excel(注解和非注解两种方式)
- Vim插件
- 从键盘读入n个整数(升序),请编写算法实现: 建立带表头结点的单链表; 显示单链表,(形如:H->10->20->30->40); 在有序单链表中插入新的数据元素x; 将单链表就地逆
- Hibernate框架ORM的实现原理
- Laravel 5.2使用phpunit提示command not found
- 顺序容器 list