栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

包,访问修饰符,封装继承和多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

包,访问修饰符,封装继承和多态

包,访问修饰符,封装继承和多态 包
  • 区分相同名字的类
  • 当类很多时,可以很好的管理类
  • 控制访问范围
  • 关键字 package 表示打包
  • 本质实际上就是创建不同的文件夹来保存类文件
  • 命名规则: 只能包含数字,字母,下划线,小圆点,但不能用数字开头,不能是关键字或保留字
  • 命名规范: 一般是小写字母+小圆点 一般是com.公司名.业务模块名
  • 常用的包:
    • java.lang.* //lang包是基本包,默认引入,不需要再引入
    • java.util.* //util包,系统提供的工具包,工具类,使用 Scanner
    • java.net.* //网络包,网络开发
    • java.awt.* //是做java的界面开发,GUI
  • 引入包:import 包; 可以引入指定类,或*全部引入 建议需要什么导入什么
  • package的作用是声明当前类所在的包,需要放在类的最上面,一个类中最多只有一句package
  • import指令,位置放在package下面,在类定义前面,可以有多句且没有顺序要求
访问修饰符
  • 四种访问修饰符,用于控制方法和属性的访问权限:
    • 公开级别:用public修饰,对外公开
    • 受保护级别: 用protected修饰,对子类和同一个包中的类公开
    • 默认级别: 没有修饰符号,向同一个包的类公开
    • 私有级别:用private修饰,只有类本身可以访问,不对外公开
    • 修饰符可以用来修饰类中的属性,成员变量以及方法
    • 只有默认的和public才能修饰类
    • 成员方法的访问规则和属性完全一样
封装
  • 封装就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作
  • 封装可以隐藏实现细节,方法 可以对数据进行验证,保证安全合理
  • 实现步骤:
    • 将属性进行私有化private
    • 提供一个公共的(public)set方法,用于对属性判断并赋值
    • 提供一个公共的get方法,用于获取属性的值
  • 避免构造器突破封装,在构造器里加set,get方法
继承
  • 继承可以解决代码复用,让我们的编程更加靠近人类思维。当多个类存在相同的属性和方法是,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来声明继承父类即可

  • class 子类 extends 父类{

    }

    • 子类会自动拥有父类定义的属性和方法
    • 父类又叫超类,基类
    • 子类又叫派生类
  • 使用继承,代码的复用性提高了,代码的扩展性和维护性提高了

  • 继承细节:

    • 子类继承了所有的属性和方法,但是私有属性和方法不能在子类直接访问,要通过公共的方法区访问
    • 子类必须调用父类的构造器,完成父类的初始化
    • 当创建子类对象时,不管使用子类的那个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过
    • 如果希望指定去调用父类的某个构造器,则显式的调用一下
    • super在使用时,需要放在构造器第一行 super只能被构造器使用
    • super()和this()都只能放在构造器第一行,因此这俩个方法不能共存在一个构造器
    • java所有类都是object类的子类,object是所有类的基类
    • 父类构造器的调用不限于直接父类!将一直往上追溯直到Object类(顶级父类)
    • 子类最多只能继承一个父类(指直接继承),即Java中是单继承机制
    • 不能滥用继承,子类和父类之间必须满足is - a 的逻辑关系
  • 继承本质分析:

    • 当子类对象创建好后,建立查找的关系
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtLwqztx-1634298667449)(C:UserslenovoAppDataRoamingTyporatypora-user-imagesimage-20211010120525464.png)]
  • 寻找方法时,顺序是:

    • 先找本类,如果有,则调用
    • 如果没有,则找父类(如果有,并可以调用,则调用)
    • 如果父类没有,则继续找父类的父类
    • 如果查找方法的过程中,找到了但是不能访问,则报错
    • 方法名 和 this.方法名 查找逻辑一样 super.方法名 为直接去找父类
  • super关键字:

    • super代表父类的引用,用于访问父类的属性,方法,构造器
    • 当子类中有何父类中的成员重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super,this,直接访问是一样的效果
    • super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员,如果多个基类中都有同名的成员,使用super访问遵循就近原则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uuByuQbD-1634298667451)(C:UserslenovoAppDataRoamingTyporatypora-user-imagesimage-20211010162549836.png)]

方法重写
  • 简单地说,方法覆盖就是子类有一个方法,和父类的某个方法的名称,返回类型,参数一样,那么我们就说子类的这个方法覆盖了父类的哪个方法
  • 注意细节:
    • 子类方法的形参列表,方法名称,要和父类方法的形参列表,方法名称完全一样
    • 子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类
    • 比如: 父类 返回类型时object ,子类方法返回类型是String
    • 子类方法不能缩小父类方法的访问权限 public > protected > 默认 > private
  • 比较
名称发生范围方法名形参列表返回类型修饰符
重载(overload)本类必须一样类型,个数或者顺序至少有一个不同无要求无要求
重写(override)父子类必须一样相同子类重写的方法,返回的类型和父类返回的类型一致,或者是其子类子类不能缩小父类方法的访问范围
多态
  • 方法或对象具有多种形态,多态是建立在封装和继承之上的
  • 方法的多态:重写和重载就体现多态
  • 对象的多态:
    • 一个对象的编译类型和运行类型可以不一致
    • 编译类型在定义对象时,就确定了,不能改变
    • 运行类型是可以变化的
    • 编译类型看定义时=的左边,运行类型看=的右边
  • 属性没有重写之说!属性的值看编译类型
  • instanceOf比较操作符,用于判断对象的类型是否为XX类型或XX类型的子类型
向上,下转型
  • 多态的前提是:两个对象存在继承关系
  • 多态的向上转型:
    • 本质:父类的引用指向了子类的对象
    • 语法: 父类类型 引用名 = new 子类类型();
    • 特点: 可以调用父类中的所有成员(需遵循访问权限),不能调用子类中特有的成员
  • 多态的向下转型:
    • 语法: 子类类型 引用名 =(子类类型) 父类引用;
    • 只能强转父类的引用,不能强转父类的对象
    • 要求父类的引用必须指向的是当前目标类型的对象
    • 当向下转型后,可以调用子类类型中所有的成员
动态绑定机制
  • 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
  • 当调用对象属性时,没有动态绑定机制,那里声明,那里使用
多态数组,多态参数
  • 数组的定义类型为父类类型,里面保存的实际元素类型为子类类型
  • 方法定义的形参类型为父类类型,实参类型允许为子类类型
Object类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rpk2bf6L-1634298667452)(C:Usersleno
voAppDataRoamingTyporatypora-user-imagesimage-20211012175330330.png)]

  • == 是一个比较运算符,既可以判断基本类型,又可以判断引用类型
    • 如果判断基本类型,判断的是值是否相等
    • 如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
  • equals方法:
    • 是Object类中的方法,只能判断引用类型
    • 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等
  • hashCode方法:
    • 提高具有哈希结构的容器的效率
    • 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的!
    • 两个引用,如果指向的是不同对象,则哈希值是不一样的
    • 哈希值主要根据地址号来的,不能完全将哈希值等价于地址
  • toString方法:
    • 默认返回:全类名+ @ + 哈希值的十六进制 子类往往重写toString方法,用于返回对象的属性信息
    • 使用快捷键生成tostring,打印对象或拼接对象时,都会自动调用该对象的tostring形式
    • 当直接输出一个对象时,tostring方法会被默认的调用
  • finalize方法:
    • 当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些释放资源的操作
    • 什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用finalize方法
    • 垃圾回收机制的调用,是由系统来决定,也可以通过System.gc()主动触发垃圾回收机制
断点调试
  • 在断点调试过程中,是运行状态,是以对象的运行类型来执行的
  • 快捷键:
    • F7(跳入) F8(跳过) shift+F8(跳出) F9(resume,执行到下一个断点)
    • F8(逐行执行代码)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号