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面向对象-继承 的相关文章

随机推荐

  • 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