我是靠谱客的博主 可爱裙子,最近开发中收集的这篇文章主要介绍笔试题:java继承、多态,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

注释里有我个人的理解 

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继承、多态的全部内容,希望文章能够帮你解决笔试题:java继承、多态所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部