【七】Java面向对象三大特性

所有知识体系文章,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(可将属性修饰为私有,仅限本类可见)
    【七】Java面向对象三大特性_第1张图片

公共访问方法

【七】Java面向对象三大特性_第2张图片

过滤有效数据

【七】Java面向对象三大特性_第3张图片
【七】Java面向对象三大特性_第4张图片

注意:外部访问只可以访问公共空间,不可以直接访问属性设置为private的私有空间,而get、set方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检测和过滤

二、继承

所谓继承,生活中的继承有儿子继承父亲的资产,而程序的继承,是类与类之间特征和行为的一中赠与或获得,好比,所有生物都会呼吸,而动物类也都会呼吸,动物类就可以继承生物类的呼吸特征;人类会走路,而老年人类就不会走路了吗?答案是不对的,当然老年人也是会走路的哈,所以定义的老年人类就可以继承人类的走路行为。

规律:

  • 功能越精细,重合点越多,越接近直接父类
  • 功能越粗略,重合点越少,越接近Object类(所谓:万物皆对象)

父类的抽象

【七】Java面向对象三大特性_第5张图片

继承

  • 语法:class子类extends父类{} //定义子类时,显示继承父类
  • 应用:产生继承关系之后,子类可以使用父类中的属性和方法,也可以定义子类独有的属性和方法
  • 好处:既提高了代码的复用性,又提高了代码的可扩展性

继承的特点

【七】Java面向对象三大特性_第6张图片

不可继承

  • 构造方法:类中的构造方法,只负责创建本类对象,不可继承
  • private修饰的属性和方法:访问修饰符的一种,仅本类可见(详见访问修饰符)
  • 父子类不在同一个package中时,default修饰的属性和方法:访问修饰符的一种,仅同包(package)可见(详见访问修饰符)

三、访问修饰符

【七】Java面向对象三大特性_第7张图片


四、方法重写

当父类提供的方法无法满足子类需求时,可在子类中定义和父类相同的方法进行覆盖(Override)

方法的覆盖

  • 方法的覆盖原则:
  • 方法名称、参数列表、返回值类型必须与父类相同
  • 访问修饰符可与父类相同或是比父类更宽泛
  • 方法覆盖的执行:
  • 子类覆盖父类方法后,调用时优先执行子类覆盖后的方法

super关键字

  • 第一种用法:
    • 在子类的方法中使用“super.”的形式访问父类的属性和方法
    • 例如:super.父类属性、super.父类方法();
  • 第二种用法
    • 在子类的构造方法的首行,使用“super()”或“super(参数)”,调用父类构造方法
  • 注意:
    • 如果子类构造方法中,没有显示定义super()或super(实参),则默认提供super()
    • 同一个子类构造方法中,super()、this()不可同时存在(因为都是要声明在首行)

 

  • 在子类中,可直接访问从父类继承到的属性和方法,但如果父子类的属性或方法存在重名(属性遮蔽、方法覆盖)时,需要加以区分,才可专项访问
    【七】Java面向对象三大特性_第8张图片

super的访问方法

【七】Java面向对象三大特性_第9张图片

super的访问属性

【七】Java面向对象三大特性_第10张图片

继承中的对象创建

  • 在具有继承关系的对象创建中,构建子类对象会先构建父类对象
  • 由父类的共性内容,叠加子类的独有内容,组合成完整的子类对象
    【七】Java面向对象三大特性_第11张图片

继承后的对象创建过程

【七】Java面向对象三大特性_第12张图片

super调用父类无参构造

【七】Java面向对象三大特性_第13张图片

super调用父类的有参构造

【七】Java面向对象三大特性_第14张图片

this与super

【七】Java面向对象三大特性_第15张图片


五、多态

  • 概念: 父类引用指向子类对象,从而产生多种形态
  • 二者具有直接或间接的继承关系时,父类引用可指向子类对象,即形成多态
  • 父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法
    【七】Java面向对象三大特性_第16张图片

多态的作用

  • 屏蔽子类间的差距
  • 灵活、耦合度低

多态中的方法覆盖

实际运行过程中,依旧遵循覆盖原则,如果子类覆盖了父类中的方法,则执行子类中覆盖后的方法,否则执行父类中的方法

多态的应用

  • 场景一:
  • 使用父类作为方法形参实现多态,使方法参数的类型更为宽泛
  • 调用方法时,可传递的实参类型包括:本类型对象+其所有的子类对象
  • 场景二:
  • 使用父类作为方法返回值实现多态,使方法可以返回子类对象
  • 调用方法后,可得到的结果类型包括:本类型对象+其所有的子类对象

【七】Java面向对象三大特性_第17张图片


六、拆箱装箱

向上转型(装箱)

【七】Java面向对象三大特性_第18张图片

向下转型(拆箱)

【七】Java面向对象三大特性_第19张图片

类型转换异常

【七】Java面向对象三大特性_第20张图片

instanceof关键字

  • 向下转型前,应判断引用中的对象真实类型,保证类型转换的正确性
  • 语法: 引用instanceof类型 //返回boolean类型结果
    【七】Java面向对象三大特性_第21张图片

【七】Java面向对象三大特性_第22张图片

你可能感兴趣的:(《JavaSE基础》)