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

thissuper

this&super

一、 this

  • this关键字表示调用的是当前类的成员变量或者成员方法
    • 一般情况下,可以省略this关键字直接调用成员变量以及成员方法
    • 但当方法的形参与成员变量同名时,如果要在方法内使用成员变量,必须添加this关键字指明使用的是当前类的成员变量
  • 使用this访问成员变量和方法时,如果在当前类中未找到,会从父类(甚至顺着继承关系继续从父类的父类)中查找(子类会继承父类中所有可以被继承的成员变量和方法)
  • this关键字只能在非static方法中使用(static属性修饰的变量或方法在当前类的对象实例化前就已经存在了)
  • 通过this()或者this(参数)调用当前类的其他构造方法时:
    • 不能递归调用
    • 只能在构造方法首行出现

二、 super

  • super关键字表示调用的是父类的成员变量或者成员方法
    • 一般情况下,可以省略super关键字直接调用父类的成员变量以及成员方法
    • 如果子类没有重写父类的方法,只要权限修饰符允许,在子类中完全可以直接调用父
      类的方法;
    • 但当子类的成员变量与父类的成员变量同名、方法的形参与父类成员变量同名或者子类的方法重写了父类的方法时,如果要在子类中使用父类的成员变量或者方法,必须添加super关键字指明调用的是父类中的成员变量或者方法(否则默认调用的是当前类自己的成员变量或者方法)
  • 使用super访问父类的成员变量和方法时,如果在直接父类中未找到,会顺着继承关系继续从父类的父类中查找,直至找到(如果一直到Object类都找不到则抛出异常)
  • super关键字只能在非static方法中使用
  • 通过super()或者super(参数)调用父类的构造方法时:
    • 不能递归调用
    • 只能在构造方法首行出现(因此在构造方法中,不可能同时显式调用父类构造方法和当前类的其他构造方法,因为这二者都要求在构造方法的首行出现)

三、 总结

  • 子类构造方法

    • 子类的任何一个构造方法,必须引用且只能引用一个其他构造方法(当前类中其他重载的构造方法或者父类的构造方法)
    • 若子类构造方法的首行既没有通过this关键字显式调用当前类的其他构造方法,也没有通过super关键字显式调用父类的构造方法,则子类此构造方法默认隐式调用super(),即调用父类中无参的构造方法
    • 如果子类构造方法中既未显式调用父类或当前类的构造方法,且父类中又没有空参的构造方法,则编译出错
  • 调用成员方法时

    • 方法前面没有superthis,先从当前类找,如果没有从直接父类找,再没有顺着继承关系继续往上找

    • 方法前面有super,从当前类的直接父类找,如果没有继续往上找

    • 方法前面有this,先从当前类找匹配方法,如果没有再从直接父类找,再没有继续往上找

  • 调用成员变量时

    • 变量前面没有superthis, 在构造方法、代码块、成员方法中时,先看是否是当前块中声明的局部变量,如果不是局部变量再去找当前类中的成员变量;如果从当前类中没有找到,再找直接父类中的成员变量,如果直接父类中没有找到再继续往上找
    • 变量前面有super,从当前类的直接父类找,如果没有继续往上找
    • 变量前面有this, 先从当前类找匹配的成员变量,如果没有再从直接父类找,再没有继续往上找

四、 笔/面试题

  1. 问:下列代码的执行结果

    public class Main {public static void main(String[] args) {User user = new User();}
    }class Person {public Person() {System.out.println("this is person class");}
    }class User extends Person {
    }
    

    答:当子类构造方法不显式调用当前类的其他构造方法以及父类构造方法时,会隐式调用父类的无参构造方法。因此当实例化User类时,会隐式的调用父类中的无参构造方法,因此输出结果为this is person class

  2. 问:下列语句的执行结果

    class Person {public int age;public Person() {System.out.println("this is person class");}
    }class User extends Person {public User() {}public User(int age) {this();super();}
    }
    

    答:super()this()不能同时出现在一个构造方法中,因此上述代码在编译期间便会报错

相关文章:

thissuper

this&super 一、 this this关键字表示调用的是当前类的成员变量或者成员方法 一般情况下,可以省略this关键字直接调用成员变量以及成员方法但当方法的形参与成员变量同名时,如果要在方法内使用成员变量,必须添加this关键字指明使用的是…...

cv::normalize()

cv::normalize()函数是OpenCV库中用于对矩阵或图像数据进行归一化处理的工具。归一化是图像处理和计算机视觉中常见的预处理步骤,它可以确保数据在一定范围内,从而有助于后续的处理和算法的稳定性和性能。cv::normalize()函数可以将输入矩阵的值缩放到一…...

【Python快速入门和实践016】Python常用脚本-对视频抽取指定帧数并保存

一、功能介绍 这段代码的功能是从一个视频文件中抽取指定数量的帧,并将这些帧保存为图像文件。步骤如下: 设置路径和参数: video_path:视频文件的路径。image_folder:保存抽取图像的目录。num_frames_to_extract&#…...

[Linux CMD] 目录与文件相关的命令

. 代表次层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表目前使用者身份所在的家目录 ~account 代表account这个使用者的家目录(account是个账号名称&#xff09…...

redis面试(十三)公平锁排队代码剖析

我们来看一下第二种redis分布式锁 第一种锁是可重入锁,非公平可重入锁,所谓的非公平可重入锁是什么意思呢?胡乱的争抢,根本没有任何公平性和顺序性可言 第二种锁,可重入锁,公平锁 通过公平锁&#xff0c…...

冷热数据拆分

订单系统设计方案之如何做历史订单和归档 订单数据越来越多,数据库越来越慢该怎么办? 随着历史订单不断累积,2017年MySQL中订单表数据量已达千万级。之后的订单数据,远远大于亿级 对数据量大的问题,进行了以下优化…...

JavaScript 基础(四)

五、DOM编程 1.常用事件 onload 页面加载后触发事件 onscroll 滚动时触发 onresize 尺寸变化时 onclick 鼠标点击 onmouseover 鼠标悬停 onmouseout 鼠标移出 onmousemove 鼠标移动,会触发多次 onfocus 对象获得光标(焦点)时&#x…...

《机器学习by周志华》学习笔记-神经网络-01神经元模型

1、背景 本书所谈的「人工神经网络」不是生物学意义的神经网络。这是T.Kohonen 1988年在Neural Networks创刊号上给出的定义。 2、概念 2.1、神经网络 关于「神经网络(neural networks)」的研究很早就已经出现过,今天的「神经网络」已经是一个比较大且多学科交叉的领域,其…...

C#中常用的扩展类

/// <summary>/// 常用扩展/// </summary>public static class UsualExtension{public static string[] chineseNumbers { "零", "一", "二", "三", "四", "五", "六", "七", &…...

麒麟v10(ky10.x86_64)升级——openssl-3.2.2、openssh-9.8p1

系统版本: ky10.x86_64 下载安装包并上传 openssh下载地址 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable openssl下载地址 https://openssl-library.org/source/index.html zlib下载地址 https://zlib.net/fossils/ 上传安装包 备份配置文件 cp -r /etc/ssh /et…...

【Unity】有限状态机和抽象类多态

一、介绍 有限状态机是一个用来进行对象状态管理的计算模型。它由一组状态、一个或者多个触发事件以及状态之间的转换条件所组成。 对于任意一个游戏对象&#xff0c;我们可以为其编写一个或者多个状态机&#xff0c;使其能够在不同状态下有不同的决策和运作机制。 核心思想…...

KETTLE调用http传输中文参数的问题

场景&#xff1a;检查服务器异常&#xff08;hive&#xff09;服务&#xff0c;就通过http发送一条短信到手机上&#xff0c;内容类似&#xff1a;【通知】 S T A R T D A T E h i v e 服务检测异常 {START_DATE}_hive服务检测异常 STARTD​ATEh​ive服务检测异常{DB_ID}&#…...

Gaussian Splatting 在 Ubuntu22.04 下部署

代码:graphdeco-inria/gaussian-splatting (github) 论文:[2308.04079] 3D Gaussian Splatting for Real-Time Radiance Field Rendering (arxiv.org) 1. 禁用自带驱动 Nouveau Ubuntu 自带的显卡驱动,是非Nvida官方版。在后面装cuda的时候,会报驱动不兼容问题。 1.进入…...

ppt中添加页码(幻灯片编号)及问题解决方案

在幻灯片母版中&#xff0c;选择插入 幻灯片编号 右下角显示幻灯片编号 问题一&#xff1a;母版中没有显示编号 原因可能是母版版式中没有设置显示&#xff0c;勾选即可。 问题二&#xff1a;子母版中没有显示幻灯片 将母版中的编号复制到子母版中。 问题三&#xff1a;应用…...

Flutter 初识:对话框和弹出层

Flutter对话框和弹出层小结 对话框AlertDialog属性解析 showDialog属性解析示例 SimpleDialog示例 AboutDialog属性解析示例 Custom Full-Screen Dialog示例 带动画效果的CustomDialog&#xff08;showGeneralDialog&#xff09;属性解析示例 自定义Dialog属性解析示例 输入对话…...

启程与远征Ⅳ--人工智能革命尚未发生

人工智能有望彻底改变工作场所。到目前为止&#xff0c;已经有人工智能工具可以取代或增强每一项工作&#xff0c;并使生产力飞速提升。甚至有许多人预测&#xff0c;文案写作等整个行业将在未来几年内被人工智能工具完全取代。但是&#xff0c;如果你抛开炒作&#xff0c;看看…...

Python教程(十五):IO 编程

目录 专栏列表引言基础概念什么是IO&#xff1f; 同步IO vs 异步IO同步IO&#xff08;Synchronous IO&#xff09;异步IO&#xff08;Asynchronous IO&#xff09; Python中的IO标准IO标准输入和输出 文件IO文件操作的上下文管理器打开文件读取文件操作内存中的数据 高级文件操…...

Qt窗口交互场景、子窗口数据获取

一、前言 在现代软件开发中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的设计不仅仅关乎美观&#xff0c;更在于用户体验和功能的无缝衔接。Qt框架以其强大的跨平台能力和丰富的组件库&#xff0c;成为众多开发者构建GUI应用的首选工具。在Qt应用中&#xff0c;窗口…...

【C++学习笔记 18】C++中的隐式构造函数

举个例子 #include <iostream> #include <string>using String std::string;class Entity{ private:String m_Name;int m_Age; public:Entity(const String& name):m_Name(name), m_Age(-1) {}Entity(int age) : m_Name("UnKnown"), m_Age(age) {}…...

单元训练01:LED指示灯的基本控制

蓝桥杯 小蜜蜂 单元训练01&#xff1a;LED指示灯的基本控制 #include "stc15f2k60s2.h" #include <intrins.h>#define LED(x) \{ \P2 P2 & 0x1f | 0x80; \P0 x; \P2 & 0x1f; \}…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...