广告
返回顶部
首页 > 资讯 > 精选 >Java中的this和super区别是什么
  • 490
分享到

Java中的this和super区别是什么

2023-06-25 13:06:54 490人浏览 薄情痞子
摘要

这篇文章主要介绍“Java中的this和super区别是什么”,在日常操作中,相信很多人在Java中的this和super区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的this和supe

这篇文章主要介绍“Java中的this和super区别是什么”,在日常操作中,相信很多人在Java中的this和super区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的this和super区别是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、简介

thissuper是类实例化时通往Object类通道的打通者;this和super在程序中由于其经常被隐式的使用而被我们忽略,但是理解其作用和使用规范肯定是必须的。

2、引子

先来看两段代码,无报错代码示例:

package com.liziba.ts;public class Father {    private String name;    public String getName() {        return name;    }}
package com.liziba.ts;public class Son extends Father{    public Son(String name) {    }   }

此时将Father类中的构造函数修改为有参的构造函数,

有错误的代码示例:

package com.liziba.ts;public class Father {    private String name;    public Father(String name) {        this.name = name;    }    public String getName() {        return name;    }}

子类代码不修改,此时子类报错:

Java中的this和super区别是什么

这就是super()的隐式使用导致的报错,具体原因是因为子类Son的构造函数中隐式的调用了父类的无参构造器,相当于隐式的super() ,上面报错的代码和下面这个是等价的。

Java中的this和super区别是什么

但是由于父类没有显示的申明无参构造函数,此时无参构造函数被有参构造函数覆盖了,所有super()调用无法抵达父类。

此时的解决办法有两种:

2.1 父类中声明无参构造函数

public class Father {    public String name;     // 父类什么无参构造函数    public Father() {    }    public Father(String name) {        this.name = name;    }}public class Son extends Father {    public Son(String name) {        super(); // 可以省略    }}

2.2 子类显示的通过super调用父类的有参构造函数

public class Son extends Father {    public Son(String name) {        // 调用父类的有参构造函数         super(name);    }}

接下来将详细分析thissuper的作用和区别。

3、this

this相当于当前对象实例,或者当前对象的一个引用,

this有如下作用:

  • 调用当前对象中的方法和属性

  • 区分对象属性和方法形参

  • 调用构造方法(必须在构造函数的第一行)

this相当于当前对象实例举例:

public class Son extends Father{    private String homework = "Java编程思想";    public void doSomething() {        // this 相当于当前Son对象实例        synchronized (this) {        }    }}

调用当前对象中的方法和属性举例:

public class Son extends Father{    private String homework = "Java编程思想";    public void doSomething() {        // this 获取当前对象的属性        String hn = this.homework;        // this 调用当前对象的方法        this.doSomething2();    }    public void doSomething2() {        // toDo    }}

区分对象属性和方法形参举例:

public class Son extends Father{    private String homework = "Java编程思想";    public Son(String homework) {        // 区分对象属性与方法形参        this.homework = homework;    }    }

调用其他构造方法举例:

public class Son extends Father{    private String homework = "Java编程思想";    public Son(String homework) {        // 调用其他构造方法,必须在第一行        this(homework, "你们未来都是架构师");    }    public Son(String homework, String name) {    }}

Java中的this和super区别是什么

4、super

super可以理解为父类(直接父类,如果有多层继承关系这里指的是最近的父类)对象的引用。super有如下的作用:

  • 调用父类非私有的属性和方法

  • 区分当前类与父类同名的属性和方法

  • 调用父类的构造函数(必须在构造函数的第一行)

调用父类属性和方法示例:

public class Father {    public String name;    public void doSomething3() {        // toDo    }    public void doSomething4() {        // toDo    }}public class Son extends Father{   public void doSomething() {       // 调用父类的非私有方法       super.doSomething3();       super.doSomething4();    // 调用父类的非私有属性       String name = super.name;   }}

区分当前类与父类同名的属性和方法示例:

public class Father {    public String name;    public void doSomething3() {        // toDo    }    public void doSomething4() {        // toDo    }}public class Son extends Father {    public String name;    public void doSomething() {          // super可以区分父类方法与当前对象的方法        doSomething3();        doSomething4();        super.doSomething3();        super.doSomething4();        // 区分当前父类的属性与当前类的属性        String fatherName = super.name;        String sonName = name;    }    @Override    public void doSomething3() {        // todo    }    @Override    public void doSomething4() {        // todo    }}

调用父类的构造函数(必须在构造函数的第一行)

public class Father {    public String name;    public Father(String name) {        this.name = name;    }}public class Son extends Father {    public Son(String name) {        super(name);    }}

Java中的this和super区别是什么

5、总结

5.1 对比差异

this 基本概念:

  • 访问本类实例属性和方法

super 基本概念:

  • 访问父类实例属性和方法

this 查找范围:

  • 先查找本类,不存在再查找父类

super 查找范围:

  • 直接查找父类

this 其他功能:

  • 单独使用表示当前对象

super 其他功能:

  • 子类复写父类方法,用于访问父类同名方法

5.2 相同点

  • 都是关键字,起指代作用

  • 构造方法中必须在第一行调用其它构造函数

到此,关于“Java中的this和super区别是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Java中的this和super区别是什么

本文链接: https://www.lsjlt.com/news/305057.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中的this和super区别是什么
    这篇文章主要介绍“Java中的this和super区别是什么”,在日常操作中,相信很多人在Java中的this和super区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的this和supe...
    99+
    2023-06-25
  • java中this和super的区别是什么
    java中this和super的区别是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、We...
    99+
    2023-06-14
  • java中super与this的区别是什么
    java中super与this的区别:super是当前对象里面的父对象的引用,而this指的是当前对象的引用。super调用基类中的某一个构造函数,而this调用的是本类中另一种形成的构造函数。super是用来访问直接父类中被隐藏的父类中成...
    99+
    2022-10-25
  • java中this和super有什么区别
    这篇文章将为大家详细讲解有关java中this和super有什么区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,...
    99+
    2023-06-14
  • java中super和this有什么区别
    在Java中,super和this是两个关键字,用于引用父类和当前类的实例。1. super关键字:- super关键字用于引用父类...
    99+
    2023-08-11
    java
  • Java 中的 this 和 super 区别
    目录1、简介2、引子2.1 父类中声明无参构造函数2.2 子类显示的通过super调用父类的有参构造函数3、this4、super 5、总结5.1 对比差异 5.2 相同点 5.3 ...
    99+
    2022-11-12
  • super与this在Java中的区别有哪些
    这篇文章将为大家详细讲解有关 super与this在Java中的区别有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。super和this的异同   &nbs...
    99+
    2023-05-31
    java this super
  • Java 中super T和extends T的区别是什么
    Java 中super T和extends T的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。extendsList< extends Nu...
    99+
    2023-06-17
  • Java中this和super的区别及this能否调用到父类使用
    目录1.super 关键字1.1 super 方法使用1.2 super 属性使用2.this 关键字2.1 this 属性使用2.2 this 方法使用2.3 this 访问父类方...
    99+
    2022-11-13
  • java中this和super有什么不同
    这期内容当中小编将会给大家带来有关java中this和super有什么不同,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的...
    99+
    2023-06-14
  • Java中的this和super怎么用
    本篇内容主要讲解“Java中的this和super怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的this和super怎么用”吧!  在Java中有两个非常特殊的变量:this和...
    99+
    2023-06-03
  • python类中super()和__init__()的区别是什么
    这期内容当中小编将会给大家带来有关python类中super()和__init__()的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言今天来谈谈super()和——init_()它们之间的区...
    99+
    2023-06-02
  • Vuex中this.$store.commit()和this.$store.dispatch()区别是什么
    这篇文章主要讲解了“Vuex中this.$store.commit()和this.$store.dispatch()区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vuex中this...
    99+
    2023-06-29
  • jQuery中this与$(this)的区别是什么
    本篇内容主要讲解“jQuery中this与$(this)的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jQuery中this与$(this)的区别是...
    99+
    2022-10-19
  • Vue.set()和this.$set()的区别是什么
    Vue.set()和this.$set()的区别是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。data () {  return&...
    99+
    2023-06-15
  • Java的this和super关键字怎么用
    本文小编为大家详细介绍“Java的this和super关键字怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java的this和super关键字怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、“ t...
    99+
    2023-06-30
  • python类中super()和__init__()的区别
    单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(self): print 'Base create' class chi...
    99+
    2022-06-04
    类中 区别 python
  • synchronized加锁this和class的区别是什么
    本篇内容介绍了“synchronized加锁this和class的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!synchroni...
    99+
    2023-06-21
  • JS构造函数中this和return的区别是什么
    本篇文章给大家分享的是有关JS构造函数中this和return的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。先看一段代码,func...
    99+
    2022-10-19
  • Java中super和extends的作用是什么
    Java中super和extends的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。List< extends T>表示该集合中存在的都是类型T的子类...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作