6.封装、继承、多态
第六章【封装、继承、多态】
一、封装
-
属性的封装
-
方法的封装
封装的优点:
-
提高代码的安全性,重要信息可以私有化,不对外暴露
-
提高代码的复用性,常用的代码或者功能封装到方法中,可以在其他地方反复调用
-
封装代码的实现细节,便于修改内部代码,提高可维护性
-
简化外部的调用,便于调用者使用
二、方法重载
必须在同一个类中,方法名相同,参数列表不同(参数个数不同、数据类型不同、参数顺序不同)
三、创建和初始化对象
new Student();
四、构造器
1、特征:
- 必须和类的名字保持一致
- 必须没有返回类型(不能写void)
2、作用:
- 使用new关键字来创建对象的时候,后面跟的必须是类中存在的构造器
- 构造器中的代码,在对象创建后会被调用,从而可以完成对象的初始化工作
3、无参构造器:
jvm在类中没有定义时会默认构造
【注意】有构造器时,一定要构建无参构造器(Spring框架用)
4、构造器的重载
5、构造器之间的调用(使用this关键字)
五、继承
extends继承--->扩展
1、java中,没有继承任何类时,会默认继承Object类
2、子类继承父类,继承了父类中的属性和方法,并可以在子类中访问这些属性和方法
3、java中,类和类之间的继承是单继承
构造器不能被继承,private修饰的属性和方法不能被继承。
static修饰的方法可以被继承,但不能被重写。
一旦发生继承,jvm必须去调用父类的构造器,然后执行子类的构造器。
4、子类继承父类,创建子类对象的时候,会先默认调用父类的构造器

绿色圆点表示public修饰方法,
黄色菱形表示protected修饰的方法,
红色方块表示private修饰的方法。
六、super关键字
1.作用:都是为了获取从父类中继承的内容
2.如果子类中声明和父类【同名的属性】,那么子类默认访问的是自己的属性,要想访问父类的属性添加super
3.如果子类中声明和父类【同名的方法】,那么子类默认访问的是自己的方法,要想访问父类的属性添加super.父类的方法
4.子类声明一个构造器的时候,如果构造器中没有使用this(..)调用自己的构造器,那么会默认使用super调用父类的无参构造器,
如果父类没有无参构造器,则需要使用super调用父类的构造器
5.super调用父类的构造器:
必须在子类的构造器中
必须放在构造器的第一行
七、方法重写
1、规定:
- 方法名、参数列表相同
- 访问控制修饰符可以被扩大,但不能缩小
- 方法抛出异常类型的范围可以缩小,但不能扩大
- 返回类型可以相同,也可以不同(基本数据类型相同,引用数据类型不同)
-
前提:必须是子类继承父类,子类能继承父类的属性和方法,重新定义了属性和方法。
-
子类重写成功,默认调用的都是子类重写后的方法;如果想在子类中调用父类的方法,则用super
-
子类的方法和父类的方法可以不同,需要遵循:两小+一大
一大:子类定义的方法的修饰符可以比父类定义的相同或比他大(public > protected > private)
两小:子类的返回类型可以和父类方法声明的返回类型相同,或是父类声明的返回类型的子类型
子类抛出的异常必须和父类异常相同,或是父类抛出异常的子异常(Exception > ArrayIndexOutOfBoundsException)
八、多态
多态:建立在继承并且重写的状况下,其实是一种运行时多态
父类的引用指向子类的对象,调用子类重写父类的方法,呈现不同的效果。
1.子父类之间
2.子类继承父类的属性和方法
3.子类重写父类的属性和方法
4.父类的引用指向子类的对象
5.调用相同的方法,呈现不同的效果
九、instanceof
- 多态判断类型
- 引用数据类型
十、引用数据类型转换
前提:转换者与被转换者之间存在继承关系
隐式转换:(子类)较小的--->(父类)较大的
显式转换:父类类型接收的一个子类对象-->子类对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理