所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂!
GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual
搜索关注微信公众号“码出Offer”,送你学习福利资源!
目录
一、封装
二、继承
三、访问修饰符
四、方法重写、super关键字
五、多态
六、装箱拆箱
思维导图参考:【七】Java面向对象三大特性思维导图
【习题与详解】
1、利用多态知识解决从Animal数组中挑选出所有Dog对象,并把这些对象放在数组中返回
2、利用继承和多态来求矩形、正方形和圆形的面积与周长
3、Java封装、继承、多态、super杂糅在一起的小练习,公司雇员员工工资问题(Employee),练习扩展:创建一个Employee数组,分别创建不同的Employee对象,并打印某个月的工资
4、Java(封装、继承、多态)创建三个类,组成一个继承树,表示游戏中的角色
【综合案例】(利用了前面所学所有知识完成)
Java中国银行系统ATM机自助实现登录、开户、存款、取款、转账、查询余额、修改预留手机号、注销账号等功能
一、封装
封装的必要性: 在对象的外部为对象的属性赋值,可能存在非法数据的录入,存在不安全隐患。就目前的技术而言,并没有办法对属性的赋值加以控制。所以要实现属性的封装非常重要!
什么是封装?
- 概念: 尽可能隐藏对象的内部实现细节,控制对象的修改及访问权限
- 访问修饰符: private(可将属性修饰为私有,仅限本类可见)
公共访问方法
过滤有效数据
注意:外部访问只可以访问公共空间,不可以直接访问属性设置为private的私有空间,而get、set方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检测和过滤
二、继承
所谓继承,生活中的继承有儿子继承父亲的资产,而程序的继承,是类与类之间特征和行为的一中赠与或获得,好比,所有生物都会呼吸,而动物类也都会呼吸,动物类就可以继承生物类的呼吸特征;人类会走路,而老年人类就不会走路了吗?答案是不对的,当然老年人也是会走路的哈,所以定义的老年人类就可以继承人类的走路行为。
规律:
- 功能越精细,重合点越多,越接近直接父类
- 功能越粗略,重合点越少,越接近Object类(所谓:万物皆对象)
父类的抽象
继承
- 语法:class子类extends父类{} //定义子类时,显示继承父类
- 应用:产生继承关系之后,子类可以使用父类中的属性和方法,也可以定义子类独有的属性和方法
- 好处:既提高了代码的复用性,又提高了代码的可扩展性
继承的特点
不可继承
- 构造方法:类中的构造方法,只负责创建本类对象,不可继承
- private修饰的属性和方法:访问修饰符的一种,仅本类可见(详见访问修饰符)
- 父子类不在同一个package中时,default修饰的属性和方法:访问修饰符的一种,仅同包(package)可见(详见访问修饰符)
三、访问修饰符
四、方法重写
当父类提供的方法无法满足子类需求时,可在子类中定义和父类相同的方法进行覆盖(Override)
方法的覆盖
- 方法的覆盖原则:
- 方法名称、参数列表、返回值类型必须与父类相同
- 访问修饰符可与父类相同或是比父类更宽泛
- 方法覆盖的执行:
- 子类覆盖父类方法后,调用时优先执行子类覆盖后的方法
super关键字
- 第一种用法:
- 在子类的方法中使用“super.”的形式访问父类的属性和方法
- 例如:super.父类属性、super.父类方法();
- 第二种用法
- 在子类的构造方法的首行,使用“super()”或“super(参数)”,调用父类构造方法
- 注意:
- 如果子类构造方法中,没有显示定义super()或super(实参),则默认提供super()
- 同一个子类构造方法中,super()、this()不可同时存在(因为都是要声明在首行)
- 在子类中,可直接访问从父类继承到的属性和方法,但如果父子类的属性或方法存在重名(属性遮蔽、方法覆盖)时,需要加以区分,才可专项访问
super的访问方法
super的访问属性
继承中的对象创建
- 在具有继承关系的对象创建中,构建子类对象会先构建父类对象
- 由父类的共性内容,叠加子类的独有内容,组合成完整的子类对象
继承后的对象创建过程
super调用父类无参构造
super调用父类的有参构造
this与super
五、多态
- 概念: 父类引用指向子类对象,从而产生多种形态
- 二者具有直接或间接的继承关系时,父类引用可指向子类对象,即形成多态
- 父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法
多态的作用
- 屏蔽子类间的差距
- 灵活、耦合度低
多态中的方法覆盖
实际运行过程中,依旧遵循覆盖原则,如果子类覆盖了父类中的方法,则执行子类中覆盖后的方法,否则执行父类中的方法
多态的应用
- 场景一:
- 使用父类作为方法形参实现多态,使方法参数的类型更为宽泛
- 调用方法时,可传递的实参类型包括:本类型对象+其所有的子类对象
- 场景二:
- 使用父类作为方法返回值实现多态,使方法可以返回子类对象
- 调用方法后,可得到的结果类型包括:本类型对象+其所有的子类对象
六、拆箱装箱
向上转型(装箱)
向下转型(拆箱)
类型转换异常
instanceof关键字
- 向下转型前,应判断引用中的对象真实类型,保证类型转换的正确性
- 语法: 引用instanceof类型 //返回boolean类型结果