什么是super?如何使用super调用超类构造函数?

2023-10-27

从之前的文章中分享过的一些知识,从Box派生的类并没有体现出它们的实际上是多么有效和强大。例如,BoxWeight构造函数明确的初始化了Box( )的width、height和depth成员。

这些重复的代码在它的超类中已经存在,这样做效率很低,而且,这意味着子类必须被同意具有访问这些成员的权力。然而,有时你希望创建一个超类,该超类可以保持它自己实现的细节(也就是说,它保持私有的数据成员)。这种情况下,子类没有办法直接访问或初始化它自己的这些变量。既然封装是面向对象的基本属性,Java提供了该问题的解决方案是不值得奇怪的。

任何时候一个子类需要引用它直接的超类,它可以用关键字super来实现。super有两种通用形式。第一种调用超类的构造函数。第二种用来访问被子类的成员隐藏的超类成员。下面分别介绍每一种用法(第二种下个文章中介绍)。

使用super调用超类构造函数
子类可以调用超类中定义的构造函数方法,用super的下面形式:

super(parameter-list); 

这里,parameter-list定义了超类中构造函数所用到的所有参数。super( )必须是在子类构造函数中的第一个执行语句。为了了解怎样运用super( ),考虑下面BoxWeight( )的改进版本:

// BoxWeight now uses super to initialize its Box attributes. 
class BoxWeight extends Box {
    
 double weight; // weight of box 
 // initialize width, height, and depth using super() 
 BoxWeight(double w, double h, double d, double m) {
    
 super(w, h, d); // call superclass constructor 
 weight = m; 
 } 
}

这里,BoxWeight( )调用带w、h和d参数的super( )方法。这使Box( )构造函数被调用,用w、h和d来初始化width, height, 和 depth。BoxWeight不再自己初始化这些值。它只需初始化它自己的特殊值:weight。这种方法使Box可以自由的根据需要把这些值声明成private。

上面的例子,调用super( )用了三个参数。既然构造函数可以被重载,可以用超类定义的任何形式调用super( ),执行的构造函数将是与所传参数相匹配的那一个。

例如,下面是BoxWeight一个完整的实现,BoxWeight具有以不同方法构造盒子的构造函数。在每种情况下,用适当的参数调用super( )。注意width, height, and depth在Box是私有的。

// A complete implementation of BoxWeight. 
class Box {
    
 private double width; 
 private double height; 
 private double depth; 
 // construct clone of an object 
 Box(Box ob) {
    // pass object to constructor 
 width = ob.width; 
 height = ob.height; 
 depth = ob.depth
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是super?如何使用super调用超类构造函数? 的相关文章

  • Mockito 在调用参数数量可变的方法时使用参数匹配器

    我试图在对具有可变数量参数的方法的调用中使用参数匹配器 Java 中的东西 没有成功 我的代码如下 我还将列出我尝试用来完成此工作的所有行 import static org mockito Mockito public class Met
  • JPA 中的复合键

    我想创建一个具有自动生成的主键的实体 而且还有一个由其他两个字段组成的唯一复合键 我如何在 JPA 中执行此操作 我想这样做是因为主键应该用作另一个表中的外键 并且使其复合并不好 在下面的代码片段中 我需要命令和模型是唯一的 pk当然是主键
  • JDK 文档是语言规范的一部分吗?

    只有一名官员Java语言规范 https docs oracle com javase specs jls se8 html index html所有 Java 实现都必须遵守它 API文档怎么样 所有Java实现都需要遵守吗这个版本 ht
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • 应用角度看kafka的术语和功能

    kafka的术语 Terminology Topic 和Consumer Group Topic 每条发布到 Kafka 集群的消息都有一个类别 这个类别被称为 Topic 物理上不同 Topic 的消息分开存储 逻辑上一个 Topic 的
  • 入门必备小游戏之炸金花

    游戏的规则 一付扑克牌 去掉大小王 每个玩家发3张牌 最后比大小 看谁赢 牌型 豹子 三张一样的牌 如3张6 分值100 顺金 又称同花顺 即3张同样花色的顺子 如红桃 5 6 7 分值75 顺子 又称拖拉机 花色不同 但是顺子 如红桃5
  • 差分+差分矩阵(更适合新手宝宝体质)

    快速掌握差分以及差分矩阵 文章目录 快速掌握差分以及差分矩阵 前言 差分 差分的定义 官方解释 差分自定义 跟前缀和放在一起理解 差分数组的应用 题目描述 差分矩阵 与前缀和矩阵进行比较 差分矩阵定义 官方解释 自定义 修改操作 跟前缀和对
  • openGauss学习笔记-43 openGauss 高级数据管理-事件触发器

    文章目录 openGauss学习笔记 43 openGauss 高级数据管理 事件触发器 43 1 语法格式 43 2 参数说明 43 3 示例 openGauss学习笔记 43 openGauss 高级数据管理 事件触发器 触发器会在指定
  • 物联网毕业设计 基于STM32的环境质量监测系统(源码+原理图+论文)

    文章目录 0 前言 1 设计架构 功能设计 2 原理图 3 软件设计 4 实现效果 5 相关代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟
  • 傻白入门芯片设计,三大基本定律(十)

    1 摩尔定律 Moore s Law 集成电路上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍 换言之 处理器的性能大约每两年翻一倍 同时价格下降为之前的一半 2 登纳德缩放定律 Dennard Scaling 随着晶体管尺
  • 2023.3.17

    Goby预置了最具攻击效果的漏洞引擎 覆盖Weblogic Tomcat等最严重漏洞 每天从互联网 如CVE 会产生大量的漏洞信息 我们筛选了会被用于真实攻击的漏洞进行每日更新 Goby也提供了可以自定义的漏洞检查框架 发动了互联网的大量安
  • go数组转tree

    数组转 tree目前发现就二种方式 go实现了两种 1 递归模式 2 双重循环 初始化数据 List 结构体 type List struct Name string json name Id int json id Pid int jso
  • (Struts2学习篇) Struts2 拦截器

    版本 struts2 5 5 此实例实现功能 用户需要指定用户名登陆 登陆成功进入相应页面执行操作 否则返回到登陆页面进行登陆 当直接访问操作页面 登陆后才能访问的页面 时则不允许 须返回登陆页面 1 Struts xml配置文件
  • [Ubuntu]安装微信/QQ/TIM的简便方法

    之前尝试过很多在Ubuntu上安装微信 QQ TIM等软件的方法 大多数都是使用Deepin wine再加 deb安装包来完成的 虽然也可以用 但是有时会有各种兼容问题出现 以前没有计较过 都是一个个解决 凑活着用 现在 偶然间找到一个可以
  • SOLO算法学习

    SOLO神经网络学习 在博客的最开始 先简单谈谈图像处理的几大目标 首先是最基本的目标分类 Object Classification 输出结果 图像中是气球 然后目标检测 Object detection 是在图像分类的基础上 给出每个气
  • 【转载】Chrome插件(扩展应用)开发全攻略

    背景 遇到了一些大量重复操作的任务 需要从页面上获取信息 查询对应的说明 整理出对应内容 然后录入到页面 提交保存 操作过程很繁琐 内容需要人为去做细微的修改 无法完全模板化 所以不好批量处理 鉴于此 考虑使用chrome插件 简化其中一些
  • VC++ CString Find函数的用法说明

    名称 CString Find 在一个较大的 字符 串中查找字符或子字符串 int Find TCHAR ch const int Find LPCTSTR lpszSub const int Find TCHAR ch int nStar
  • pycharm入门

    pycharm基础使用步骤 1 下载pycharm 2 新建Python工程 1 如下 点击Create New Project 2 选择保存位置 点击create 3 命名 打开界面如下 4 这时就可以创建文件了 项目文件夹右击new g
  • 全面探索 FreeMarker 模版引擎的扩展性

    FreeMarker 模版引擎简介 FreeMarker 是一个采用 Java 开发的模版引擎 是一个基于模版生成文本的通用工具 FreeMarker 被设计用来生成 HTML Web 页面 特别是基于 MVC 模式的应用程序 虽然 Fre
  • xxxx is deprecated

    编译工程发现json object object get is deprecated 最终解决 jason c库中有声明 deprecated Please use json object object get ex json c库编译的时
  • 中国银行业数字化转型研究报告 附下载

    以在数据化 智能化为特征的数字化转型是银行业的一次产业革命 以支付功能的在线化为例 近年来移动支付领域的 脱媒 给银行上了生动的一课 即使是全国性的大型银行 面对互联网公司的 降维 竞争也是无能为力 区域性银行更是全面失守 这种数字化金融服
  • 如何阻止点击其他区域,input框会失去焦点事件

    如何阻止点击其他区域 input输入框会失去焦点位置 阻止失去焦点 通过a标签 设置user select为none 通过js阻止默认事件 通过内联js实现 在开发过程中 总会碰到以下两个情况 要求点击某个区域 阻止input框 或者设置了
  • 1.30 fcntl函数

    include
  • 什么是super?如何使用super调用超类构造函数?

    从之前的文章中分享过的一些知识 从Box派生的类并没有体现出它们的实际上是多么有效和强大 例如 BoxWeight构造函数明确的初始化了Box 的width height和depth成员 这些重复的代码在它的超类中已经存在 这样做效率很低