Java面向对象-继承

2023-05-16

Java继承的概念与实现
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。 继承使用extends 关键字。

类的继承( extends )格式:
class 父类 {
}
class 子类 extends 父类 {
}

例子:
在这里插入图片描述
注意:由于Student类继承 People类,虽然name 和 age 变量没有在 Student 中定义,但是已在 People 中定义,可以直接拿来用。Student 是 People 的子类,People 是Teacher 类的父类。

构造方法不能被继承:
注意:构造方法不能被继承。一个类的构造方法只有两种方式获得:

  1. 自己编写构造方法。
  2. 当类中没有构造方法时,类会自动生成不带参数的默认构造方法。
    单继承性:
    Java 允许一个类仅能继承一个其它类,即一个类只能有一个父类,这个限制被称做单继承性。
    Java继承中的方法重写:
    方法重写又称方法覆盖,方法重写是子类与父类的一种多态性表现
    子类可以重写所继承父类除private以为的方法与成员。
    在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。
    如果在新类中定义一个方法,其名称、返回值类型和参数列表正好与父类中的相同,那么,新方法被称做重写旧方法。

被重写的方法在子类中只能通过super调用。

注意:重写不会删除父类中的方法,而是对子类的实例隐藏,暂时不使用。
例子:在这里插入图片描述
方法重写的原则:
重写方法的返回类型、方法名称、参数列表必须与原方法的相同。
重写方法不能比原方法访问性差(即访问权限不允许缩小)。
重写方法不能比原方法抛出更多的异常。
被重写的方法不能是final类型,因为final修饰的方法是无法重写的。
被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
被重写的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足重写条件,那么会发生编译错误;反之亦然。即使父类和子类中的方法都是静态的,并且满足重写条件,但是仍然不会发生重写,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。

方法的重载:
方法重载是一个类的多态性表现,
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。只能重载构造函数
例子:在这里插入图片描述
重载规则:
被重载的方法必须改变参数列表;
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
重写和重载的区别:
在这里插入图片描述
this关键字:
this关键字:指向自己的引用
this 与super 关键字类似,this 用来表示当前类的实例,super 用来表示父类。

super 关键字:
我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
1.通过 super 调用父类的变量以及父类的隐藏变量:
当调用父类的隐藏变量时,必须要在父类中声明 getter 方法,因为声明为 private 的数据成员对子类是不可见的。

2.通过 super 调用父类的方法和父类被重写了的方法和父类的构造方法:
super 也可以用在子类的子类中调用父类方法,Java 能自动向上层类追溯。直到找到该方法为止,父类行为被调用,就好像该行为是本类的行为一样,而且调用行为不必发生在父类中,它能自动向上层类追溯。
在许多情况下,使用默认构造方法来对父类对象进行初始化。当然也可以使用 super 来显示调用父类的构造方法。
例子:在这里插入图片描述
从执行结果可看出构造方法基本初始化运行顺序是:
1.初始化子类必先初始化父类。
2.要先初始化父类,必须先初始化它的属性再初始化它的方法。
3.再回到子类,初始化子类属性,再回到子类的构造方法,才算是完成一个类的实例化

在构造方法中要注意:
无论是 super() 还是 this(),都必须放在构造方法的第一行。
在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。
不能在构造方法以外的任何方法内调用构造方法。
在一个构造方法内只能调用一个构造方法。
如果编写一个构造方法,既没有调用 super() 也没有调用 this(),编译器会自动插入一个调用到父类构造方法中,而且不带参数。

super 与 this 的区别:
super 不是一个对象的引用,不能将 super 赋值给另一个对象变量,它只是一个指示编译器调用父类方法的特殊关键字。
this是指向自己的引用,this 用来表示当前类的实例,可在当前类中调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java面向对象-继承 的相关文章

  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • 使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器

    我正在尝试使用 HttpUrlConnection 将 base64 编码的图像发送到服务器 我遇到的问题是大多数图像均已成功发送 但有些图像会生成 FileNotFound 异常 我的图像编码代码可以在下面找到 public static
  • Google App Engine with Java - 运行 javac.exe 编译器时出错

    在 Windows XP 上 刚刚下载并解压谷歌应用程序引擎java sdk to C Program Files appengine java sdk 我已经安装了jdk C Program Files Java jdk1 6 0 20
  • 使用 Java 在 WebDriver 中按 Ctrl+F5 刷新浏览器

    我已经使用 java 刷新了 WebDriver 中的浏览器 代码如下 driver navigate refresh 如何使用 Java 在 WebDriver 中按 Ctrl F5 来做到这一点 我认为您可以使用 WebDriver 和
  • URL.setURLStreamHandlerFactory

    我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序 我的jar包含一个依赖jar jar in jar 我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Ecl
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何开始使用 Chainsaw for Log4j?

    我想开始使用 Chainsaw v2 几乎没有关于它的信息 我只找到了this http www velocityreviews com forums t140105 help using chainsaw for log4j html 但
  • 如何比较 Struts 2 中 url 请求参数中的单个字符

    我正在读取具有单个字符的 url 参数 它将是Y or N 我必须写一个条件来检查它是否Y or N并做相应的事情 这是我写的 但似乎不起作用 总是转到其他地方 网址是
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • 请参阅 Java EE eclipse 调试中的 POST 参数

    我在调试 Java EE 方面没有经验 我更像是一个 javascript 人 我需要查看哪些 HTTP POST 参数到达服务器端 我在表单将其操作指向的 jsp 文件中放置了一个断点 现在我在调试变量窗口中找不到 POST 内容 他们在
  • 是否有任何API可以将Microsoft Exchange服务器与Java应用程序集成以进行任务同步?

    我正在尝试将 Java Web 应用程序与 Microsoft Exchange 服务器集成以实现双向日历 即任务 同步 是否有用于此集成的 Java 开源 商业 API 谢谢 文卡特 看一眼j 交易所 http sourceforge n
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java:java.util.ConcurrentModificationException

    我正在制作 2D 目前正在研究用子弹射击 子弹是一个单独的类 所有项目符号都存储在称为项目符号的数组列表中 当它超出屏幕一侧 Exception in thread main java util ConcurrentModification
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • Java:由 HTTP 连接创建的等待连接线程存活时间很长

    我有一个服务器端代码 用于检查 SOAP 服务是否已启动 代码如下 String response while response length 0 try final URL url new URL DummySoapServiceURL
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 公共方法与公共 API

    在干净的代码书中 有一个观点是 公共 API 中的 Javadocs 同样 Effective java 一书也有这样的内容 项目 56 为所有公开的 API 元素编写文档注释 所以这就是我的问题 所有公共方法都被视为公共 API 吗 它们
  • 如何捕获 try-with-resource 语句中 close 方法抛出的异常

    我正在读关于try with resourceJava 中的语句可用于指定任意数量的资源 try Resource1 res1 initialize code Resource1 res2 initialize code statement

随机推荐

  • 9. 黑马旅游网遇到的bug

    1 JDBCUtils的问题 问题 xff1a java lang IllegalArgumentException Property dataSource is required 解决 xff1a 路径 多了一个 去掉即可 2 邮箱激活遇
  • 汇编中的栈(push、pop)

    在学习汇编的时候 xff0c pop和push很重要 xff1b 下面说说简单的见解 xff08 栈 xff1a 先进后出 xff09 push 0 xff1a 将 0 的单元内容压入栈底 pop E xff1a 将栈顶的内容弹出赋给 E
  • 使用jsp-servlet-service-dao四层结构完成用户信息的增删改查操作(2020.12.22)

    本章目录 目录结构登录注册总结源码下载 需求 xff1a 使用Servlet和四层结构知识 xff0c 改进只用JSP xff08 不分层 xff09 完成用户信息的增删改查操作的信息管理系统 xff0c 使其具有更好的软件结构 xff0c
  • java实现10种排序算法

    1 冒泡排序 Bubble Sort span class token keyword import span span class token namespace java span class token punctuation spa
  • Java中的Static静态代码块以及各代码块之间的执行顺序

    结论 xff1a 基本上代码块分为三种 xff1a Static静态代码块 构造代码块 普通代码块 代码块执行顺序 xff1a 静态代码块 gt 构造代码块 gt 构造函数 gt 普通代码块 继承中代码块执行顺序 xff1a 父类静态块 g
  • MobaXterm远程连接Linux之网络配置

    配置centos7网络 1 先确定自己要设置的网段是多少 xff1a 我选用网段192 168 91 xxx 我的网关选192 168 91 2 下面的所有网关要和这个相同 xff0c 你们可以完全和我一致 2 配置虚拟网络编辑器 3 虚拟
  • nginx平滑升级(2022.12.13)

    相关视频教程 xff1a https www bilibili com video BV1BK411W7hn 相关文章 xff1a https blog csdn net u012885136 article details 1220549
  • 国王游戏——高精度好题

    题目描述 恰逢 H H国国庆 xff0c 国王邀请 nn 位大臣来玩一个有奖游戏 首先 xff0c 他让每个大臣在左 右手上面分别写下一个整数 xff0c 国王自己也在左 右手上各写一个整数 然后 xff0c 让这 nn 位大臣排成一排 x
  • linux安装curl命令(下载解压安装)(我的是debian版)及常见使用方法

    curl是一款著名的字符界面下的下载工具 xff0c 支持HTTP HTTPS FTP FTPS DICT TELNET LDAP FILE 和GOPHER 此外还具有cookies支持 断点续传 FTP上传 密码支持 SSL支持和代理支持
  • vs2015 驱动程序开发环境配置

    需要满足两个插件即可 xff1a Windows SDKWDK xff08 windows Driver kit xff09 注意 xff1a 两者版本一定要一致 xff08 不考虑最小版本号 xff09 首先安装vs2015 xff0c
  • 操作无法完成因为其中的文件夹或文件已在另一个程序中打开

    在我们删除或者移动文件的时候 xff0c 经常会遇到这种情况 xff0c 然后又找不到在任务管理器打开的程序 xff0c 导致我们无法对文件进行操作 首先我们需要打开任务管理器 xff0c 选择到性能 xff0c 然后点击下面的资源监视器
  • kubeadm 内网离线安装

    离线安装过程 xff0c 仅供参考 xff0c 陆续更新 机器三台 master 为01 slave 为03 04 以下步骤1到7 xff0c 三台都需操作 一 关闭防火墙 二 关闭swap swapoff a 三 关闭selinux se
  • 冒泡排序

    开发工具与关键技术 xff1a Visual Studio2015 撰写时间 xff1a 2019年7月24日 最原始的交换排序思想 xff1a 对待排序序列中的记录两两比较其关键字 xff0c 发现两个记录呈现逆序时就交换两记录的位置 x
  • 2023知识追踪最新综述来自顶刊!!!——《Knowledge Tracing:A Survey》

    Knowledge Tracing xff1a A Survey 论文在2023年2月收录于ACM Computing Surveys xff08 IF好像有14 xff09 后文里 xff0c 我用技能一词 来 代替原文中的KC know
  • 关于Ubuntu18.04安装Coreform Cubit出现Segmentation fault (core dumped)问题的解决

    Ubuntu18 04只能安装旧版本的Trelis 17 01 xff0c 其他版本不支持
  • 长江游艇俱乐部租金问题

    题目来源 xff1a 王晓东 xff0c 算法设计与分析 长江游艇俱乐部在长江上设置了n个游艇出租站1 xff0c 2 xff0c xff0c n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站
  • Week4--CSP模拟--C - 可怕的宇宙射线

    文章目录 题目描述输入输出样例输入样例输出思路综述剪枝条件 xff08 满足以下条件 xff0c b点之后的可以忽略 xff09 xff1a 如何建立二维地图记忆化搜索需要的数组方向表示 过程Step1 xff1a Step2 xff1a
  • visualStudio断点报错:当前不会命中断点。还没有为该文档加载任何符号

    原因 xff1a 当前调试的程序和工作目录中的符号表pdb不匹配 符号表 pdb与断点调试 符号表是将编译链接后生成的可执行文件 xff08 exe xff09 和源码做出的一个映射表 xff0c 其中存储的是全局变量 函数的名字和地址 x
  • leetcode 941. 有效的山脉数组

    给定一个整数数组 A xff0c 如果它是有效的山脉数组就返回 true xff0c 否则返回 false 让我们回顾一下 xff0c 如果 A 满足下述条件 xff0c 那么它是一个山脉数组 xff1a A length gt 61 3
  • Java面向对象-继承

    Java继承的概念与实现 继承是Java面向对象编程技术的一块基石 xff0c 因为它允许创建分等级层次的类 继承是类与类之间的关系 xff0c 是一个很简单很直观的概念 xff0c 与现实世界中的继承 xff08 例如儿子继承父亲财产 x