• 【第一阶段:java基础】第7章:面向对象编程中级-1(P264-P306):包、访问修饰符、封装、继承、super、方法重写


    本系列博客是韩顺平老师java基础课的课程笔记,B站:课程链接,吐血推荐的一套全网最细java教程,获益匪浅!

    1. 包

    • 包的作用

      • 可以区分相同名字的类
      • 当类很多时,可以更好地管理类
      • 控制访问范围
    • 包的基本语法

      • package com.hspedu
      • package是关键字,表示打包
      • om.hspedu 表示包名
    • 包的本质:创建不同的文件夹来保存类文件

    • 命名规则:只能包含数字、字母、下划线、小圆点、但是不能以数字开头,不能是关键字或保留字

    • 命名规范:com.公司名.项目名.业务模块名

    • 常用的包

      • java.lang.*:是基本包,默认引用,不想要另外再引用
      • java.util.*:系统提供的工具包,工具类,使用Scanner
      • java.net.*:网络包,用于网络开发
      • java.awt.*:java界面 GUI
    • 包的使用细节

      • import java.util.*:表示引入util包下面的所有类
      • import java.util.Scanner:只会引入util包下的Scanner类
      • 建议使用第二方法来引入(因为java开发者就是这样引入的)

    2. 访问修饰符

    • JAVA提供四种访问修饰符,用于控制方法和属性的访问权限
    • 共有四种
      • 公开级别:public 对外公开
      • 受保护级别:protected 对子类和同一个包中的类公开
      • 默认级别:没有修饰符,向同一个包的类公开
      • 私有级别:private 只有类本身可以访问,不对外公开(最严格的一个权限)
      • 在这里插入图片描述
    • 细节
      • 访问修饰符可以修饰类中的成员方法,属性以及类本身
      • 只有默认和protected才能修饰类,并且遵循上述规则
      • 成员方法的访问规则和属性完全一样

    3. 封装(encapsulation)

    • 把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。
    • 优点
      • 隐藏实现细节
      • 对数据进行验证,保证安全合理
    • 实现步骤
        1. 将属性私有化(使得不能直接修改属性)、
        1. 提供一个公共的set方法,用于对属性判断并赋值。在该方法的内部,加入数据验证的业务逻辑
        1. 提供一个公共的get方法,用于获取属性的值
    • 封装与构造器:可以将set方法写在构造器中
    • 在这里插入图片描述

    4. 继承

    • 继承可以解决代码复用,让我们的编程更加接近人类的思维,当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些方法和属性,所有的子类不需要重新定义这些方法和属性,只需要通过extends来声明继承关系即可

    • 基本语法

      • class 子类 extends 父类{}
      • 子类就会自动拥有父类定义的属性和方法
      • 父类又叫做超类,基类
      • 子类又叫做派生类
    • 继承原理图

      • 在这里插入图片描述
      • 在这里插入图片描述
    • 细节

      • 子类继承了所有的属性和方法,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问
      • 子类必须调用父类的构造器,完成父类的初始化。当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中使用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过
      • 如果希望指定去调用父类的某个构造器,则需要显示地调用一下,super(参数列表)。super在使用时,需要放在构造器的第一行。this()调用构造器和super()调用构造器都需要放在构造器的第一行,因此这两个方法不能共存在一个构造器中。
      • java中所有的类都是object的子类,object是所有类的父类。(ctrl+H可以看到所有类的继承关系)
      • 父类构造器的调用不限于直接父类,将一直往上追溯到object类(顶级父类)
      • 子类最多只能继承一个父类(指直接继承),即java中是单继承机制
      • 不能滥用继承,子类和父类之间必须满足is-a 的逻辑关系(cat is an animal)
    • 内存布局

      • 加载所有的父类信息和自己的信息到方法区
      • 在堆中开辟类空间(所有的父类都会有空间分配)
      • 在这里插入图片描述
    • 属性访问规则

      • 首先看子类自己有没有这个属性
      • 如果子类有这个属性,并且可以访问,则返回信息
      • 如果子类没有这个属性,就看父类有没有这个属性(如果可以访问,就返回)
      • 如果父类没有,就一直向上层查找

    5. Super

    • super 代表父类的引用,用于访问父类的属性、方法、构造器

    • super可以访问父类的属性和方法,的那不能访问父类的private属性和方法

    • super访问父类的构造器 super(参数列表),只能放在构造器的第一句,只能出现一句

    • 在这里插入图片描述

    • 细节

      • 调用父类的构造器的好处:分工明确,父类属性由父类初始化,子类的属性由子类初始化

      • 在这里插入图片描述

      • 当子类中有和父类中的成员重名时,为了访问父类的成员,必须通过super。如果没有重名,在子类访问父类的方法时,使用super和this访问的效果是一样的

      • super的访问不限于直接父类,如果爷爷类和本类中有同名成员,也可以使用super去访问爷爷类的成员。

      • 如果多个上级类中都有同名的成员,使用super访问遵循就近原则A->B->C

    • this和super的区别

      • 在这里插入图片描述

    6. 方法重写/覆盖overwrite

    • 子类有一个方法和父类的某一个方法名称 返回类型 参数一样 则说子类的这个方法覆盖了父类的这个方法
    • 细节
      • 子类方法的形参列表,方法名要和父类的完全一样
      • 子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类:比如 父类返回类型是object 子类的返回类型是String
      • 子类方法不能缩小父类方法的访问权限(可以扩大也可以保持一致)
        方法重写和方法重载
    • 重写遵循原则:
      • 两同:方法名相同,参数列表相同
      • 两小:子类的抛出异常小于等于父类抛出异常,子类的返回类型小于父类的返回类型
      • 一大:子类的访问修饰符权限大于父类的访问修饰符权限
    • 方法重写和方法重载
      • 重写发生在继承中,重载发生在一个类中
      • 在这里插入图片描述

    明天继续更新多态 😭 这章内容好多呀!

  • 相关阅读:
    基于SpringBoot的篮球竞赛预约平台
    一文带你入门机器学习超参数优化算法
    联盟 | 彩漩 X HelpLook,AI技术赋能企业效率提升
    洛谷刷题C语言:远古档案馆(Ancient Archive)、VOLIM、SAHOVNICA、Tuna、KRIŽALJKA
    Rust的Slice切片
    外包做的系统宕机了,逼得我重新设计一套MySQL数据库架构!
    public,private,protected,default的区别
    深入理解JavaScript——执行上下文与调用栈
    es6 数据类型
    环境配置、如何安装OpenHarmony HAR
  • 原文地址:https://blog.csdn.net/qq_39328436/article/details/127721888