Java中的重载、覆盖和隐藏

Java中的重载、覆盖和隐藏

 
重载(overload):发生在一个类的内部,而且是针对方法而不是域而言。若方法的签名相同,但参数的个数或者参数的类型不同,则构成了重载。但返回类型不在考虑范围之内,也就是说,如果仅仅是返回类型不同,则构不成重载。

 

覆盖(override):发生在父类和子类之间,而且是针对实例方法(即非静态方法)而不是域而言。构成覆盖要满足以下条件:

1、父类中的static方法不可以被覆盖;

2、父类中的final方法不可以被覆盖;

3、方法的签名、参数个数以及参数类型都要相同;

   对于返回类型要说明两点:

   1)如果返回类型是引用类型,则覆盖方法的返回类型可以声明为父类方法声明的返回类型的子类型;

   2)如果返回类型是基本类型,则覆盖方法的返回类型必须和父类方法的返回类型相同;

   对于方法参数的说明:不管父类方法中的参数是否是final的,子类都可以修改这个参数;

4、子类方法的访问权限要大于等于父类的访问权限;

5、子类方法可以改变某些方法修饰符,如:synchronized、native和strictfp。

6、子类方法的throws子句可以和父类方法不同,它列出的每一个异常类型都应该和父类中的异常类型相同或者是父类异常类型的子类;

 

隐藏(hidden):发生在父类与子类之间,而且只是针对静态方法和域。说明:被声明为final的类方法不可以被隐藏。

 

实例方法被子类的方法覆盖时,实际被调用的方法是在执行时决定的。

类方法被子类的方法隐藏时,实际被调用的方法是在编译时决定的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值