关于面向对象中继承、多态的面试题分析

题目:有以下类

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(B obj) {
		return ("B and B");
	}
	public String show(A obj) {
		return ("B and A");
	}
}
class C extends B{}
class D extends B{}

问,以下输出结果是什么?

A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.show(b));
System.out.println(a1.show(c));
System.out.println(a1.show(d));
System.out.println(a2.show(b));
System.out.println(a2.show(c));
System.out.println(a2.show(d));
System.out.println(b.show(b));
System.out.println(b.show(c));
System.out.println(b.show(d));

题目分析:

1. a1.show(b)

分析:当前参数传递为b对象,B类继承了A类,因为A a1创建是A的对象,所以a1能调用的只有自己的两个方法,即调用了show(A obj)

输出 A and A

2. a1.show(c)

分析:同上,C类继承B类,B类又继承A类 ,即调用了A类中的show(A obj)

输出 A and A

3. a1.show(d)

分析:同上,D继承B类,B又继承A ,因为A a1创建是A的对象,即调用了A类中的show(D obj)

输出 A and D

4. a2.show(b)

分析:参数传递的是B对象,而a2创建的是B的对象,即调用的B类中的重写了A类的方法show(A obj)

输出 B and A

5. a2.show(c)

分析:同上,参数为C类,C继承了B,即调用的B类中的重写了A类的方法show(A obj)

输出 B and A

6. a2.show(d)

分析:同上,参数为D的对象,D继承了B,B又继承了A,此时调用B继承了A的方法show(D obj)

输出 A and D

7. b.show(b)

分析:参数传B对象,b调用B中的show(B obj)

输出 B and B

8. b.show(c)

分析:参数是C的对象,C继承了B,即调用B中的show(B obj)

输出 B and B

9. b.show(d)

分析:参数是D的对象,D继承了B,此处调用B继承了A中的方法show(D obj)

输出  A and D

以上便是这个小小面试题的思路分析啦,分享给大家。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值