JAVA“继承和多态”(超详细)

文章内容仅代表个人理解,如有错误欢迎到评论区指点,文章内容仅供参考——


本篇对java中的"继承和多态"进行详细的讲解

目录:

本期会分成一下三部分进行讲解:

  1. super关键字
  2. 继承
  3. 多态

super关键字

我们先定义两个类

子类用extends继承了父类


1.super访问父类的成员变量


2.super访问父类的成员方法


3.super访问父类的构造方法

如果父类中存在有参构造,子类必须要先帮助父类完成构造没写的话是默认存有无参构造的,如图中的super()都是默认存在的;

如果我们把父类构造修改一下

子类不写构造方法

是不是编译错误

添加构造方法不写super

也不对

添加有参的super

编译通过了,由此可见一定要先帮助父类构造


一、继承(extends)

定义:继承是面向对象编程中的一种机制,允许一个类(子类)基于另一个类(父类)来创建。子类可以继承父类属性方法,并且可以在不修改父类的情况下进行扩展,可以达到代码复用的目的。

形如

我们先定义几个类;其中Animals是父类,Lion和Monkey是子类

1.父子同名的成员变量、方法

我们在Animals和Lion中都定义了like,那我们实例化子类对象调用like会输出什么呢?

我们可以看到是子类的游泳,那为什么不是父类的呢,我们注释一下子类的like再试一下;

哦~到这里聪明的小伙伴知道大概是怎么回事了,没错父子同名的话遵循就近原则,再最近一次修改的算;方法也是一样的;

看执行的是子类重写方法重写简单来说就是结构一样,里面内容可以一样也可以不一样

由此可见同名遵循就近原则;


2.继承后子类实例化对象的执行顺序

我们实例化子类对象后

可见静态先执行,而且父类优先

这里走的无参构造因为是实例化时候没有传值

传值后就会调用有参构造了,而且构造方法总是最后执行


3.java是否存在多继承

java不存在多继承,要用接口来实现多继承,这样保证只有一个has-a的形式;父类可以有多个子类,但是子类只能有一个父类;也可以形成继承链;(下次更新接口)


二、多态

1.向上转型

父类引用 引用其子类对象

Animals 父类类型引用子类Monkey对象,

向上转型的作用

  • 提高了代码的灵活性,使得可以将子类对象赋值给父类类型的变量,从而可以使用父类类型的方法和属性,同时也可以更轻松地扩展和维护代码。

为了直观看到向上转型的作用,我们在Animals类中创建一个PrintLike方法;

monkey重写like方法

lion重写like方法

我们创建两个向上转型,就可以在不用单独设置两个或多个PrintLike方法了,是不是很便捷;


2.向下转型

向下转型一般都要强制类型转换,而且不安全;

我们定义一个fly方法在animals类中

我们发现居然可以用

最后小狮子会飞,这是不科学的,所以说是不安全的


3.怎么触发多态

父类引用 引用子类不一样时候,调用子类重写的方法,表现不一样的行为就说发生了多态


4.动态绑定

动态绑定是多态性的一种实现方式,它是在程序运行时根据对象的实际类型来确定调用的方法。在使用多态时,编译器并不知道实际调用的方法是哪一个,而是在运行时根据对象的类型进行动态绑定。

在这个代码中在这个例子中,编译器在编译时不知道哪个 like() 方法会被调用,它在运行时根据对象的实际类型做出决定。这是动态绑定。


5.静态绑定

有动态就有静态

比如我们传参数

在方法重载中,编译器根据参数类型和数量选择调用哪个方法。在编译时,这种绑定就已经确定。


好啦看到这里想必您对Java有了新的认知和了解,如果对您有帮助的话请帮我点个一件三连!谢谢!谢谢!谢谢

我只是个初学者——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一条小鱼儿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值