文章内容仅代表个人理解,如有错误欢迎到评论区指点,文章内容仅供参考——
本篇对java中的"继承和多态"进行详细的讲解
目录:
本期会分成一下三部分进行讲解:
- super关键字
- 继承
- 多态
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有了新的认知和了解,如果对您有帮助的话请帮我点个一件三连!谢谢!谢谢!谢谢!
我只是个初学者——