当前位置: 首页 > 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?
  • 广州高新技术企业认定申报条件、申报材料的具体指南!
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • CAP理论的例子讲解
  • exif信息对照
  • fetch 从初识到应用
  • Hibernate最全面试题
  • mac修复ab及siege安装
  • Material Design
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • MySQL的数据类型
  • React-Native - 收藏集 - 掘金
  • Redux系列x:源码分析
  • SAP云平台里Global Account和Sub Account的关系
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Xmanager 远程桌面 CentOS 7
  • 番外篇1:在Windows环境下安装JDK
  • 基于组件的设计工作流与界面抽象
  • 聊一聊前端的监控
  • python最赚钱的4个方向,你最心动的是哪个?
  • 阿里云ACE认证学习知识点梳理
  • #微信小程序(布局、渲染层基础知识)
  • (1)svelte 教程:hello world
  • (12)目标检测_SSD基于pytorch搭建代码
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (WSI分类)WSI分类文献小综述 2024
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (篇九)MySQL常用内置函数
  • (三)Honghu Cloud云架构一定时调度平台
  • (学习日记)2024.01.19
  • (一)VirtualBox安装增强功能
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .bat批处理(六):替换字符串中匹配的子串
  • .chm格式文件如何阅读
  • .net core使用ef 6
  • .Net FrameWork总结
  • .NET 反射的使用
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...