继承

强调!!!以下只是我个人看法,如有错误的地方请文明指出微笑,如有其他看法请耐心讨论微笑,如有看不懂可以参考其他有关博客微笑,最后如有想喷的出门左转不谢。微笑     

        今天重新看了一下继承,把我认为比较重要的总结一下吧,也为了以后自己复习的时候快一点。

首先说道继承就会有方法覆盖和方法重载。他们的异同点总结如下:

相同点:

1、都要求方法名相同。

2、都可以用于抽象方法和非抽象方法之间。

不同点:

1、方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致。

2、方法覆盖要求返回类型一致,但方法重载没有要求。

3、方法覆盖只能用于子类覆盖父类的方法,方法覆盖用于同一个类中的所有方法(包括从父类中继承而来的方法)。

4、方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有限制。

5、父类的方法只能被子类覆盖一次,而一个人方法在所在的类中可以被重载很多次。

还有super和this关键字,都可以使被屏蔽的方法和变量变为可见。在以下情况下方法和变量会被屏蔽:

1、在一个方法内,局部变量和类的成员变量同名,或者局部变量和父类的成员变量同名时,按照变量的作用域规则,只有局部变量在方法内可见。

2、当子类的某个方法覆盖了父类的一个方法,在子类的范围内,父类的方法不可见。

3、当子类中定义与父类中同名的成员变量时,在子类的范围内,父类的成员变量是不可见的。

注:如果父类中的成员变量和方法被定义为private类型,那么子类永远无法访问他们,如果试图用super.var的形式去访问父类的private的变量,那么就会导致编译错误。

在程序中,在以下情况下会使用super关键字:

1、在类的构造方法中,通过super语句调用这个类的父类的构造方法。

2、在子类中访问父类的被屏蔽的方法和属性。

注:在构造方法和实例方法内使用super关键字,而在静态方法和静态代码块内不能使用super关键字。

属性是没有多态的,即没有重载和覆盖但是方法有重载方法和覆盖方法。

其次继承中还有动态绑定和静态绑定,他们的区别很好判断;

1、静态绑定发生在编译时期,动态绑定发生在运行时期。

2、使用private或static或final修饰的变量或者方法使用的是静态绑定,而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。

3、静态绑定使用类信息来完成,动态绑定则需要使用对象信息来完成。

4、重载的方法使用静态绑定来完成,而重写的方法则使用动态绑定。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值