类的继承

类的继承

1.多态和动态绑定

多态就是一种类型的变量可以应用多种实际类型的对象,而不关心具体的类型,动态绑定就是父类调用子类和父类都有的方法,不过子类可能进行了重写,这样就可以统一处理,不过就是还可以实现每个子类,也就是对象的特有行为,或者说子类调用父类的方法。

什么叫多态,其实就是子类对象可以赋值给父类引用变量,实际上调用的是子类实现,这就是动态绑定(在父类方法的引用,最后的实现的是子类中重写的方法)。

2.this和super

在通过new构造对象的时候,父类会进行一个初始化,通过super可以指定调用父类相应的构造方法,没有super就是调用父类的默认构造方法,当子类方法和父类方法相同的时候,super就可以强制访问父类的变量和方法。

this也是引用一个对象,一般就是引用自身,他是实实在在的,可以作为一个方法参数,可以作为返回值的,而super就是一个关键字,无法作为参数和返回值的,他就是告诉编译器访问父类的相关变量和方法。

3.构造方法

如果父类没有默认的构造方法,如果没有指定相应的方法名就会编译出错。在父类构造方法中调用可被子类重写的方法,是不好的,容易引起混淆。父类的构造方法最好只调用自己的private的方法。

4.静态绑定

如果说一些构造方法是动态绑定的,那么实例变量、静态方法、静态变量、private就是静态绑定的,静态绑定就是编译阶段就可以决定,就是可以直接看出来的,而动态绑定就是在运行阶段,静态绑定就是根据引用对象的类型来决定,访问哪里的方法和变量。

5.重载和重写

重载是指在一个类里面出现多个方法的方法名一样,不过参数个数或者参数类型或者参数的顺序不同,当有多个重名的方法的时候,在决定要调用哪个方法的过程中,首先是按照参数类型的匹配度匹配,参数最符合的进行动态绑定。而重写一般就是出现在继承中,参数的返回类型什么的参数列表都一样。

多态:多态性是指允许相同或不子类型的对象对同一消息做出不同的响应

重写是同一个动作作用在不同的对象上有着不同的解释

重载是同一个动作作用于同一个对象有着不同的解释

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性(静态多态),而后者实现的是运行时的多态性(动态多态)

override

在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载

overload
  • 发生在父类与子类之间
  • 方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
  • 访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
  • 重写方法一不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常(里式替换原则)

6.继承访问权限

子类的访问权限一定要大于等于父类,这样才是满足继承is a 的基本关系,用术语说就是子类重写方法不能降父类方法的可见性。

7.继承的两面性

(1)继承为一些框架,通过继承了,首先做了大量基类和基础公共代码,使用者就可以适当的重写定制,简单的实现的强大的功能。

(2)继承为啥不好

  • 首先就是他破坏了面向对象中封装的思想,本来人家就是指向在意功能而不在意细节,可以子类重写的时候就存在一些实现细节的依赖,如果子类不知道父类的实现细节就不能正确的进行拓展,我们开发人员还是要去看父类代码的实现细节,父类也不能随意的修改一些细节,因为这样就会导致他的子类出错,

  • 第二点就是继承没有反应is a的关系,比如说企鹅也是鸟可是不会飞。在父类里面肯定有飞的方法,不过企鹅只会走。总的来说就是父类有的属性和行为,并不是公共的逻辑,子类不一定都适用。、

(3)怎么解决这个继承的不好问题

  • 使用final关键字,final修饰的类和方法不能继承,这就是实现了父类在改代码里面修改的自由性.

  • 合成复用原则,用组合和聚合的方式来抵挡父类变化对子类的影响,保护子类.

  • 使用接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值