我是靠谱客的博主 可爱裙子,这篇文章主要介绍笔试题:java继承、多态,现在分享给大家,希望可以做个参考。

这是一道笔试题,请分析输出结果:

注释里有我个人的理解 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Test { 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是A(调用对象),从重载的角度 //顺序为: //(1)方法形参参数类型恰好相同 //(2)方法参数类型是本类的父类(继承关系),没有的话就找参数是本类父类的父类,以此类推 //(3)还找不到则编译报错 System.out.println(a1.show(b));//A and A System.out.println(a1.show(c)); //A and A System.out.println(a1.show(d));//A and D //从“ A a2 = new B(); ”中new后面那个类,即本类中,从下往上找到它的祖宗类(最顶层); //在它的祖宗类内部找形参参数类型相同的方法; //如果找不到,在祖宗内部找形参参数类型是本类的父类的方法,若没有这个方法(参数是本类的父类)接着找参数是(本类父类的父类)的方法, //若直到祖宗类内部的方法的(形参参数)找到了(祖宗参数)还没有,编译会报错; //如果找到了,紧接着从祖宗往下找那个合适的方法的重写,可以隔代,如果没有重写就输出祖宗类那个合适的方法; //若有重写再往下找到没有重写为止,且受“ A a2 = new B(); ”中new后面那个本类类型的影响, //即最多找重写找到本类为止,不管本类的子类有没有重写这个方法。 //上面简而言之,就是编译在左,运行在右 System.out.println(a2.show(b)); //B and A System.out.println(a2.show(c));//B and A System.out.println(a2.show(d));//A and D //只在调用对象内部中找,这里是b //继承父类后,子类中也有父类的方法 System.out.println(b.show(c));//B and B System.out.println(b.show(d));//A and D } } 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(A obj){ return ("B and A"); } public String show(B obj){ return ("B and B"); } } class C extends B{} class D extends B{}

 

最后

以上就是可爱裙子最近收集整理的关于笔试题:java继承、多态的全部内容,更多相关笔试题内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部