零基础学习Java 08

news/2024/11/29 1:50:18/

目录

继承

super关键字

继承中构造方法的关系

继承使用场景

继承的设计技巧

多态

多态中的成员访问特点


继承

  • 继承:多个类中存在相同属性(成员变量)和行为(成员方法)时,将这些内容抽取到单独一个类中,那么多个类就无需再定义这些属性和行为了,只要继承那个类即可

  • 通过extends关键字可以实现类与类的继承

    class 子类名 extends 父类名{}
    

  • 单独的类称为父类、基类或超类,子类也叫派生类,父类中的内容是多个子类重复的内容
  • 继承的好处:1、提高了代码的复用性,多个类相同的成员可以放到同一个类中;2、提高了代码的维护性,如果功能的代码需要修改,只需要修改父类这一处即可;3、让类与类之间产生了关系,这是多态的前提(这也是继承的缺点),使得类的耦合性增强
  • 开发的原则:低耦合、高内聚
  • 继承的缺点:1、破坏了封装,子类与父类之间紧密耦合,子类依赖父类的实现,造成子类缺乏独立性;2、支持扩展,但是往往以增强系统结构的复杂度为代价;3、不支持动态继承,在运行时子类无法选择不同的父类;4、子类不能改变父类的接口
  • 继承的特点:1、Java只支持单继承,不支持类的多继承,一个类只能有一个父类,不可以有多个父类;2、Java支持多层继承(继承体系)
    class A{}
    class B extends A{}
    class C extends B{}
    

  • 子类只能继承父类中所有非私有的成员方法和成员变量
  • 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类的构造方法
  • 不要为了部分功能而去继承
  • 在Java中,所有的继承都是公共继承
  • 继承绝对不会删除任何字段或方法
  • Object类是Java中所有类的父类,如果某个类没有明确地指出父类,那么Object类就被认为是这个类的父类,这个类就默认访问Object类的无参构造

在子类中访问一个变量的执行顺序:首先在子类的局部范围中找,然后在子类成员范围中找,最后在父类成员范围中找(不能访问到父类的局部范围),如果还是没有就报错 

super关键字

  • super有两个含义:1、调用父类的方法;2、调用父类的构造器
  • 调用父类成员变量
    super.成员变量
    

  • 调用父类的构造方法(使用super调用构造器的语句必须是子类构造器的第一条语句)
    super(参数)
    
  • 调用父类的成员方法
    super.成员方法
    

    注:

  • super不是一个对象的引用,不能将值super赋给另一个对象变量,它只是一个指示编译器调用父类方法的特殊关键字
  • this代表本类对应的引用,通过其操作本类的成员,super代表父类存储空间的标识

继承中构造方法的关系

  • 子类中所有的构造方法默认都会访问父类中的无参构造方法,因为子类会继承父类中的数据,可能还会使用父类的数据,所以子类初始化之前一定要先完成父类数据的初始化(先进行父类的初始化再进行子类的初始化,这叫分层初始化)
  • 子类每一个构造方法的第一条语句都是super(),这是系统默认的,写不写都有,但如果父类没有无参构造方法,这时在子类中系统就不会自动调用父类的无参构造了,需手动调用父类的构造方法,不然会报错

继承使用场景

采用假设法:如果有两个类A、B,只要它们符合A是B的一种或者B是A的一种(A is B)或(B is A)这样的关系,就可以考虑使用继承

 

继承的设计技巧

  1. 通过父类定义子类时,只需要在子类中指出子类与父类的不同之处即可,将通用的字段和方法(不管是否是抽象的)都放在父类(不管是不是抽象类)中,而更特殊的方法就放在子类中

多态

  • 多态:一个对象变量可以指示多种实际类型的现象(某一个对象在不同时刻表现出来的多种状态)
  • 多态的使用前提:1、要有继承关系;2、要有方法重写;3、要有父类引用指向子类对象
    父类名 f = new 子类名();
    

  • 多态的好处:1、提高了代码的维护性;2、提高了代码的扩展性
  • 向上转型
    fu f = new zi();
    

  • 向下转型
    zi z = (zi)f;//要求该f必须是能够转换为zi的
    

 

多态中的成员访问特点

  • 成员变量:编译看父类,运行看父类
  • 成员方法:编译看父类,运行看子类(由于只有成员方法存在方法重写,所以它运行看子类)
  • 静态方法:编译看父类,运行看父类(静态和类相关,算不上重写,所以访问的还是父类的)
  • 动态绑定(后期绑定):在运行时能够自动的选择适当的方法,java中的动态绑定是默认行为,动态绑定是多态得以实现的重要因素
  • 静态绑定(前期绑定):在程序执行前已经被绑定,即在编译过程中就已经知道这个方法是哪个类的方法,此时由编译器获取其它连接程序实现。在Java中,final、private、static修饰的方法以及构造函数都是静态绑定的,不需程序运行,不需具体的实例对象就可以知道这个方法的具体内容。

http://www.ppmy.cn/news/41735.html

相关文章

CS5463 DP转HDMI8K30Hz转换芯片规格书|CS5466 typec转HDMI8K30Hz (4K144Hz)转换芯片规格书

1.CS5463/CS5266概述 CS5463/CS5466是一款高性能的Type-C/DisplayPort1.4到HDMI2.1协议转换器,通过Type-C/D DisplayPort链路接收视频和流,并转换为支持TMDS或FRL输出信令的HDM。DP接收器在2个通道上支持高达8.1 Gbps的链路速率。HDMI输出端口可以作为T…

类的相关知识(一)

目录 OOP(面向对象编程) 区别 面向过程 面向对象 类 成员函数 类的作用域 类的大小 this指针 OOP(面向对象编程) 本质上是一种编程思想,通过把我们编程中遇到的事物抽象成对象来编程 区别 面向过程 struc…

SQL Day01

1.关系型数据库的特点 理论基础:关系代数(集合论、一阶逻辑、关系运算) 具体表象:用二维表装数据 ​ - 表 - table / entity - relation ​ - 列 - column / field - attribute ​ - 行 - row / record - tuple ​ - 列的数量 - …

不完整数据下视听情感识别的自注意融合

Self-attention fusion for audiovisual emotion recognition with incomplete data 译文:不完整数据下视听情感识别的自注意融合 摘要:在本文中,我们以视听情感识别为例,考虑了多模态数据分析的问题。我们提出了一种能够从原始…

Excel快捷键

ctrlQ 快速分析,对数据进行快速分析,如求和,图表、格式化数据等 ctrlT 转化为超级表,超级表的功能很多,很便捷 ctrlE 快速填充,能够根据规律自动填充对应的数据提出或拼接 ctrl;ctrlshift&#…

华硕ROG|玩家国度 冰刃7双屏 GX650PY Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原

华硕ROG|玩家国度 冰刃7双屏 GX650PY Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原 文件地址:https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 华硕工厂恢复系统 ,安装结束后带隐藏分区以及机器所有驱动软件 需准备一个…

C中的预处理,宏

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…

【docx模块】python中可以处理word文档的模块

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 今天给大家带来docx模块得介绍以及使用~ 一.docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的。 也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看…