向上转型和向下转型

向上转型

class Father
{	
	public void speak(){
	   
		System.out.print("Father");
	}
}
class Son extends Father
{	
	//重写父类方法
	public void speak(){
	   
		System.out.print("Son");
	}
	//扩展方法
	public void prints(){
	   
		System.out.print("独有的");
	}
}
//向上转型
Father f=new Son();
f.speak()
  • 向上转型,父类引用的是子类对象,调用方法时会先调用子类中与父类同名的方法(重写父类的方法)

  • 相当于父类的方法被覆盖,只有当子类没有该方法时才去父类中寻找但是父类中的private私有的,static静态的无法被覆盖,调用时还是调用父类的方法。

  • 向上转型会暂时丢失子类的扩展的方法(父类不拥有的)

向下转型

Father f=new Son();
Son a=(Son)f
f.prints();
//本身是Son类型,向上转型之后还能向下转型,找回扩展的数据
//这种强转方式编译和运行都不会报错
Father f=new Father();
Son a=(Son)f
//这种编译没问题,运行出错。
  • 向下转型有风险,因为继承同一父类的可能还有其他的子类,强转的时候可能是把其他子类的引用转成另一个子类,所以在强转时,不光要告诉它强转的类别,还要判断是否是该类别

if(Son instanceof Father)
{
Father f=new Son();
Son a=(Son)f
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值