重载/覆盖

重载(overload):
        对于类的方法(包括从父类中继承的方法), 方法名相同 参数列表不同 的方法之间就构成了重载关系。

覆盖 (override): 
        也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。
        当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。

发生覆盖的条件:

1、“三同一不低” 子类和父类的方法名称,参数列表,返回类型必须完全相同,而且子类方法的访问修饰符的权限不能比父类低。

2、子类方法不能抛出比父类方法更多的异常。即子类方法所抛出的异常必须和父类方法所抛出的异常一致,或者是其子类,或者什么也不抛出;

3、被覆盖的方法不能是final类型的。因为final修饰的方法是无法覆盖的。

4、被覆盖的方法不能为private。否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

5、被覆盖的方法不能为static。所以如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。


父类引用指向子类对象注意事项:

1、该引用只能调用父类中定义了的方法和变量

2、如果子类中重写了父类中的一个方法,那么在调用这个方法时将会调用子类中的这个方法,如果没有重写将会调用父类中的这个方法。

3、变量不能被重写,如果重写就会报错。

4、jvm会根据定义的类型来判断是否需要捕获异常,而不是其实际类型,编译时,编译器只知道你是定义的类型,而非创建的这个类型。



Java的重载机制:
重载的实质:在一个类中使用签名相同的多个方法。
按照范围,可以将重载分为在一个类中重载,和在子类和父类中重载。现分别解释如下:
1.在一个类中定义多个具有相同签名的方法,这些方法必须具有不同的参数列表,比如一个类的构造函数。
2.在父类和子类中,子类由于继承而拥有了父类的某些方法,此时在子类再定义具有相同签名的方法(必须具有不同的参数列表),这个地方很容易和重写相混淆,因此千万注意。
重载的规则主要记住亮点:
1、是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。
2、是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值