向上转型笔试题

笔试时遇到这样一道题:



public class A {

	public String run(D obj)
	{
		return ("A_D");
	}
	
	public String run(A obj)
	{
		return("A_A");
	}
	static class B extends A
	{
		public String run(B obj)
		{
			return ("B_B");
		}
		public String run(A obj)
		{
			return ("B_A");
		}
	}
	static class C extends B
	{
		
	}
	static class D extends B
	{
		
	}
	
	public static void main(String[] args) {
		A ab = new B();
		System.out.println(ab.run(new B()));
		System.out.println(ab.run(new C()));
		System.out.println(ab.run(new D()));
	}
}
/*
运行结果:
B_A
B_A
A_D
*/

当时脑子一片懵,不知从哪入手,忽略了向上转型的细节:
向上转型,在运行时,会丢弃子类对象中与父类对象中没有的方法。也会覆盖与父类中相同的方法–重写。
做题时把关注点都放在了B、C、D继承的问题上,而忽略了向上转型后不能调用子类所特有的方法的特点。
即: B 中 run(B obj) 方法被丢弃。结果不会出现 B_B

#参考
https://blog.csdn.net/u014388299/article/details/52764817

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值