Java的继承与多态

发表于:2016-12-15 10:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:One Word    来源:51Testing软件测试网采编

  子类初始化过程
  子类初始化的特点: 要创建子类对象必会先创建父类对象,才能有子类对象的存在
  初始化关键点
  · 子类构造器中存在默认的super()语句调用父类无参构造器,若父类只有其他带参数的构造器时需要显示地调用达到 “先初始化父类对象,然后初始化自己”的要求
  · 父类中若没有无参构造器(除了默认生成的无参构造器),子类则不能定义无参构造器
  · 父类构造器若用private修饰,就无法创建出子类对象,因为无法先创建父类对象
  · super([参数]) 在构造器中调用时必须非注释的第一行代码,保证父类的先初始化
  拓展: 创建子类对象时从父类开始初始化,而销毁时从子类开始销毁
  Obejct类相关
  Object类作为所有类除Object类外的公共父类,具备了所有对象的公共行为和特征
  Obejct常见方法
  equals方法: 用于对象间逻辑比较,默认比较的是两者的引用地址值,通常需要重写该方法,进行自定义的逻辑比较来达到目的
  toString方法: 代表着对象的字符串表示内容,对引用对象进行打印时底层就是通过打印toString方法来实现,而默认打印的内容为hashCode值,通常需要重写该方法,让打印的内容更加具体和灵活
  getClass方法: 用来获得对象的运行时类型即真实类型,常用于Java的反射机制中
  hashCode方法: 获得对象堆中所存储的存储位置的hash值
  多态
  多态常见于有继承关系的类与类间,和有实现关系的接口和类之间
  多态如何产生
  当子类对象赋值给父类变量时就产生了多态
  什么是多态
  对象存在多种形态
  对象的类型种类
  多态的作用
  屏蔽了不同子类之间在方法实现上的差异性,而允许在运行时确定具体各自的实现行为
  多态的特点
  同一类型的对象在运行时可能存在不同行为
  注意: 字段不存在多态行为,因为字段访问由编译器解析,字段访问时的内存区域已经确定,不是动态的.
  Java中的方法都是通过动态绑定实现多态
  动态绑定/运行时绑定: 在运行时根据对象的类型信息进行绑定>
  多态在方法调用场景
  当指向子类对象的父类变量调用方法.
  多态在实例方法调用时的场景
  · 该实例方法若子类父类都有,那么运行时会执行子类方法
  · 该实例方法若子类有而父类没有,则编译时报错,无法在父类上找到该方法
  · 该实例方法若父类有而子类没有,则运行时没有在子类中找到,就执行父类方法
  · 多态在静态方法调用时的场景
  · 静态方法属于类,跟多态无关,底层会转换为父类去调用父类的静态方法
  · 多态与继承关系一样,也只属于对象级别
  向下转型 强制转换
  由一般转换为更特殊的类型对象
  当父类类型需要转换其某子类类型时,需要显示表示出要转换的目标类型,对于对象之间没有子父关系的进行转换会出现运行时错误.
  转换不安全, 需要类型检查,类型转换错误会返回ClassCastException
  instanceof与类型转换: instanceof可以用来在引用类型强制转换过程中,判断实例是否为某个类型或者其父类的实例,如果是会返回YES;否则返回NO
  getClass()与类型转换: 用getClass方法可以获得对象的运行时类型即真实的类型,然后根据特定的类型进行强制转换
  instanceof的注意点: 对象对所在父类类型使用instanceof关键字时也会返回YES结果
  向上转型 自动转换
  当子类对象类型转换为父类类型时,会自动完成转换
  · 向上转型会丢失具体的类型信息
  · 转换安全
  拓展: 向上转型的副作用:导致子类方法的丢失,并且丢失具体的类型
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号