Java继承和多态

一.继承

继承顾名思义即一方可以把另一方的东西啊传承到自己手里。

例如猫和狗都是动物。动物都有吃饭,喝水等行为,也有年龄,体重的属性。

那么我们在定义猫和狗的时候就没必要去重复写,而是我们可以定义一个动物类,然后猫和狗去继承动物类即可。

即可以实现类与类直接共性的抽取和代码的复用。

理解应该不难,我们直接看语法!

1.继承语法

例如上面就是狗类继承动物类,extends+要去继承的类

2.访问修饰限定符 

public和protected修饰的成员可以被子类继承并直接访问,private成员则继承之后不可直接访问。

3.成员变量

子类继承以后,子类如果和父类有重名的成员变量,子类优先用子类自己定义的。

4.super

那如果我们想要使用父类的成员变量(成员方法),怎么办呢?我们可以使用super.a或者super.成员方法或者super()(父类的构造函数)去显示调用。

所以子类初始化的时候也可以先调用super()先去对父类初始化。(默认的无参构造也会有默认super()),但是一旦自己写含参构造就不能用了。

并且super只能有一个而且只能放在第一行!

5.super和this对比

6.final

7.继承方式(Java中不支持多继承)

8.实例化顺序

顺序如下

下面这个题目就是yxyz.

二.多态

接下来我们来了解多态。

接下来我们一个一个来研究!

我们先来说一下

1.向上转型(切片)

上面是一些常见的向上转型的三个时机,也即赋值转型,传参转型,返回值转型

这个时候父类装子类,那么属于父类的部分就正常切割即可(相当于非父类的部分进行切割(内存中仍然存在,但是不允许用父类进行访问))

2.方法的覆盖重写

可以加@Override的注解,如果没有进行重写,会报警告帮助快速定位错误。

3.父类引用装子类调重写过的方法

animail和Dog都有eat函数,此时父类装子类,调用的就是子类的函数了。

这个过程就叫动态绑定!

object类(万物之父)

object类是所有类的父类

例如tostring的重写或者其他很多功能都是依赖于object类和多态才实现的!

3.向下转型

一般我们只推荐向上转型以后再回复进行向下转型,其他时候除非对此非常了解和保证不会不出错,一般不会推荐这样向下转型,这样非常不安全!

向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。 Java 中为了提高向下转型的安全性,引入 了 instanceof ,如果该表达式为 true ,则可以安全转换。
4.多态的优缺点
最后我们来了解一下多态的优缺点!
好处:
1. 能够降低代码的 " 圈复杂度 ", 避免使用大量的 if - else
2. 可扩展能力更强
更容易加入新的类,且避免改动代码!
多态缺陷:代码的运行效率降低
1. 属性没有多态性
当父类和子类都有同名属性的时候,通过父类引用,只能引用父类自己的成员属性
2. 构造方法没有多态性
5. 避免在构造方法中调用重写的方法
" 用尽量简单的方式使对象进入可工作状态 ", 尽量不要在构造器中调用方法 ( 如果这个方法被子类重写 , 就会触 发动态绑定, 但是此时子类对象还没构造完成 ), 可能会出现一些隐藏的但是又极难发现的问题 .
至此继承和多态就到此结束,谢谢观看。
  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值