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

【Java语言】继承和多态(一)

继承

       继承就是实现代码的复用;简而言之就是重复的代码作为父类(基类或超类),而不同的可以作为子类(派生类)如果子类想要继承父类的成员就一定需要extends进行修饰(如:(修饰符)+class+子类+extends+父类)

举一个例子吧:就比如学校吧,学校里面有学生、老师等,【这里就可以分三类:学校类(也可以称为父类),老师类、学生类(这两类就叫做子类)】,他们都是有名字、学号(工号)、都在教室上课、在食堂吃饭等,这些共性就属于父类中的成员,好有就是子类的特性,先说学生类:学生特有的成绩、需要考试、做作业等,老师类:老师特有的工资、需要给同学讲课、准备教学等;把这些信息转成代码就是如下:

       那现在子类就创建好了,但是又可能会出现问题啦。比如:子类和父类的成员变量、成员方法出现同名,需要怎么分辨;如果是变量的话该怎么做,方法又该怎么做?

访问父类成员 

       在子类方法中或子类对象访问成员时,先是访问自己的成员,如果自己没有在访问父类成员,如果再没有就出现编译错误。

子类和父类不存在同名

        在子类方法中或子类对象访问成员时,直接访问父类的成员。

子类和父类存在同名

       在子类方法中或子类对象访问同名的成员时,子类会优先访问自己的成员(就近原则),但是想要访问父类的同名变量就需要通过关键字super来进行访问(super后面会讲到,在这就不重复)。 

super关键字

       对于重名的成员来说,在子类中可以访问自己但是不能访问同名的父类,super就满足了子类访问父类的同名成员。 super的作用就是在子类方法中访问父类的成员,所以默认看到super就是访问父类的成员,所以想要访问变量还是方法都是super.访问。举如下例子:

super只能在非静态方法中使用,在子类方法中,访问父类的成员变量和方法。 

子类构造方法

        子类对象构造时,需要先调用父类构造方法,然后执行子类的构造方法。 意思就是,在调用子类构造方法前必须先执行父类的构造方法,因为子类对象中成员是有两部分组成的,父类继承下来的以及子类新增加的部分,将从父类继承下来的成员构造完整 ,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整 。

  •  若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用父类构造方法
  • 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。//大概意思就是要完整补充子类构造方法中的参数,且第一行需要super(父类的所有参数,无需写参数类型),不然就编译失败。
  • 在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。
  • super(...)只能在子类构造方法中出现一次,并且不能和this同时出现 

super和this的区别 

【相同点】

  1. 都是Java中的关键字
  2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
  3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在 

【不同点】

  1. this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用。(在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性)
  2. 在构造方法中:this(...)用于调用本类构造方法,super(...)用于调用父类构造方法,两种调用不能同时在构造方法中出现
  3. 构造方法中一定会存在super(...)的调用,用户没有写编译器也会增加,但是this(...)用户不写则没有

继承中父类和子类代码块的顺序:父类静态代码块,子类静态代码块,父类实例代码块 ,父类构造方法,然后就是子类的实例代码块、构造方法;(且静态代码块只执行一次)

protected关键字

 父类中private成员变量虽然在子类中不能直接访问,但是也继承到子类中了

继承方式 

       继承方式有单继承,多层继承,不同类继承同一个类;在Java中支持多继承(一个类继承多个类) 。

final关键字 

       final关键可以用来修饰变量、成员方法以及类。只要被final修饰的变量都变成“常量”(就是无法改变);如果修饰的是类,那么这个类就不能被继承;如果修饰的是方法,那么表示该方法不能被重写(重写后面会提及)。 


http://www.mrgr.cn/news/64055.html

相关文章:

  • 实习冲刺Day11
  • WPF 实现冒泡排序可视化
  • Windows 部署非安装版Redis
  • Spring JPA 集成 YashanDB:让数据管理变得轻松愉快
  • 信息学科平台系统开发:Spring Boot实用指南
  • 线代的几何意义(一)——向量,坐标,矩阵
  • 小夜灯语音识别芯片,灯具声控方案,NRK3301
  • Linux初阶——线程(Part3):POSIX 信号量 CP 模型变体
  • 线程安全的单例模式(Singleton)。
  • 基于Python可视化的热门微博数据分析系统
  • WPF 实现冒泡排序可视化
  • nfs服务器
  • TPP-PEG-N3叠氮-聚乙二醇-四苯基吡嗪,功能话聚乙二醇,PEG分子量可定制
  • 打造一个带报时功能的卡通数字时钟 —— 使用Python和Tkinter
  • 【松下PLC.通信】——威卡力传感器如何和松下PLC进行Free协议的通讯
  • 域名购买需要多少钱
  • Spring Boot框架在信息学科平台开发中的高级应用
  • 真题与解析 202206三级 青少年软件编程(Python)考级
  • Nat Med病理AI系列|哈佛大学团队发表研究,探讨深度学习在病理诊断中的公平性问题及解决方案|顶刊精析·24-11-02
  • 从零开始学AIStarter:创作者模式全攻略【AI工作流、数字人、大模型、对话、设计...】
  • 【生物学&水族馆】观赏淡水鱼检测系统源码&数据集全套:改进yolo11-dysample
  • 2024年华为OD机试真题-最小的调整次数-Python-OD统一考试(E卷)
  • 第三百零九节 Java JSON教程 - JSON语法
  • 平安养老险党委书记、董事长甘为民: “养老金融”大发展正当其时,空间广阔
  • Spring Boot详解:从入门到精通
  • 最全面的AI大模型面试题集合,存一下吧很难找全的!