当前位置: 首页 > news >正文

继承多态 知识要点

继承 extends

  • class 子类 extends 父类

  • 子类就可以不定义父类当中的成员了

  • 使代码重复使用

  • 继承之后要添加新成员,否则无意义,自己的成员优先

  • super 指定告诉编译器访问的父类中的成员,构造方法没有被继承,需要super调用。和this一样不能出现在static方法中。

  • super()调用父类的构造方法。必须要在第一行,并且不能和this()同时出现

  • 不同包中的子类用super引用

  • java不支持多继承 ,有接口

  • final 常量,方法不能被重写

  • 组合 把一个类作为另一个类的成员

  • 多态:不同的对象去完成某个行为会产生出不同的状态

  • 条件

    • 发生在继承条件下

    • 需要重写

    • 向上转型

  • 什么是向上转型?把子类对象给到父类对象的引用,也就是父类引用引用了子类对象

  • 子类重写父类成员函数,发生在动态绑定,编译期间无法绑定。父类引用 引用 子类对象,通过父类引用去调用父类和子类同名的方法,此时调用的是子类的方法。

    • 静态绑定使重在,编译阶段就绑定

    • 当子类继承父类之后,在实例化子类对象的时候,先要调用父类的构造方法,来帮助父类初始化。

  • 执行顺序:父类的静态->子类的静态->父类的实例-父类的构造-子类的实例-子类的构造

向上转型
class A {}
class B extends A {}
class C extends B {}
public class Test {public static void main(String[] args) {A a0=new A();//1A a1=new B();//2A a2=new C();//3}
}
  • 父类引用只能调用父类,不能调用子类特有方法

  • 调用的方法子类和父类都有,运行的时候会调用子类的方法,这叫动态绑定(晚绑定)

    • 编译的时候认为还是确实调用了父类的方法,运行的时候绑定到了子类当中

  • 静态绑定(早绑定):编译的时候就已经确定调用的方法

    1. 直接赋值

    2. 通过传参

    3. 通过返回值

  • 同一个引用调用了同一个方法,但是引用的对象不一样,表现得行为不一样,把这种思想称之为多态

向下转型
  • 不安全

  • 需要用instanceof进行判断

重写
  1. 方法名相同

  2. 参数列表相同(顺序、个数、类型)

  3. 返回值类型相同

  • 被final修饰的方法,使密封方法,不能被重写

  • 被static修饰的方法,不能被重写

  • 子类重写的访问权限要>=父类的 访问修饰限定符权限排序:private<default<protected<public

  • 被private修饰的方法使不能被重写的

  • 范围值类型构成父子类关系也成为重写,构成协变类型

  • 可以使用@override注释来显式指定

  • 在构造方法中调用父类和子类同名的方法时也会发生动态绑定。意味着构造方法内也会发生动态绑定。故应当避免在构造方法中调用重写的方法。

  • 先分配内存空间再调用构造方法

多态可以降低圈复杂度

相关文章:

  • pstree 进程树
  • openssl3.2 - note - Getting Started with OpenSSL
  • 使用C/C++举例说明使用宏定义时需要注意的各个点
  • 中文编程入门(Lua5.4.6中文版)第四章 Lua 循环
  • 【C语言】数9的个数
  • 美食杂志制作秘籍:引领潮流,引领味蕾
  • 面试算法-65-二叉树的层平均值
  • Cesium:绘制一个 3DTiles 对象的外包盒顶点
  • linux 升级openssl1.1.1w 亲测记录
  • Python 操作sqllite
  • Linux部署SVN
  • Spring Boot 获取maven打包时间
  • 【GPT-SOVITS-05】SOVITS 模块-残差量化解析
  • 电影aac是什么意思?如何播放、转换、编辑aac?
  • 广州高新技术企业认定申报条件、申报材料的具体指南!
  • 【翻译】babel对TC39装饰器草案的实现
  • 0x05 Python数据分析,Anaconda八斩刀
  • Fabric架构演变之路
  • HTTP请求重发
  • JS 面试题总结
  • Js基础——数据类型之Null和Undefined
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Vue2.0 实现互斥
  • 分享几个不错的工具
  • 给第三方使用接口的 URL 签名实现
  • 工作中总结前端开发流程--vue项目
  • 排序算法学习笔记
  • 普通函数和构造函数的区别
  • 前端面试之闭包
  • 前端性能优化--懒加载和预加载
  • 数据仓库的几种建模方法
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 终端用户监控:真实用户监控还是模拟监控?
  • HanLP分词命名实体提取详解
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​520就是要宠粉,你的心头书我买单
  • ​渐进式Web应用PWA的未来
  • #NOIP 2014# day.1 T2 联合权值
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (八)Spring源码解析:Spring MVC
  • (备忘)Java Map 遍历
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (转)Linq学习笔记
  • (转载)从 Java 代码到 Java 堆
  • ****Linux下Mysql的安装和配置
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net FrameWork总结
  • .net mvc部分视图
  • .net MySql
  • .NET 表达式计算:Expression Evaluator