问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中this和super关键字到底是啥意思?求深刻讲解

发布网友 发布时间:2022-04-25 05:46

我来回答

5个回答

懂视网 时间:2022-04-23 14:53

收藏整理了ES6 Class 中的 super 关键字,本文将分享给大家,非常不错,具有参考借鉴价值,需要的朋友参考下吧,希望能帮助到大家。

以下只是个人的学习笔记:

super这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。

1、当作函数使用


注意,super虽然代表了父类A的构造函数,但是返回的是子类B的实例,即super内部的this指的是B,因此super()在这里相当于A.prototype.constructor.call(this)。


可以看到,在super()执行时,它指向的是子类B的构造函数,而不是父类A的构造函数。也就是说,super()内部的this指向的是B。

2、当作对象使用

在普通方法中,指向父类的原型对象;在静态方法中,指向父类。


上面代码中,子类B当中的super.c(),就是将super当作一个对象使用。这时,super在普通方法之中,指向A.prototype,所以super.c()就相当于A.prototype.c()。

通过super调用父类的方法时,super会绑定子类的this。


上面代码中,super.s()虽然调用的是A.prototype.s(),但是A.prototype.s()会绑定子类B的this,导致输出的是2,而不是1。也就是说,实际上执行的是super.s.call(this)。

由于绑定子类的this,所以如果通过super对某个属性赋值,这时super就是this,赋值的属性会变成子类实例的属性。


上面代码中,super.x赋值为3,这时等同于对this.x赋值为3。而当读取super.x的时候,读的是A.prototype.x,所以返回undefined。

注意,使用super的时候,必须显式指定是作为函数、还是作为对象使用,否则会报错。


上面代码中,console.log(super)当中的super,无法看出是作为函数使用,还是作为对象使用,所以 JavaScript 引擎解析代码的时候就会报错。这时,如果能清晰地表明super的数据类型,就不会报错。

最后,由于对象总是继承其他对象的,所以可以在任意一个对象中,使用super关键字。

热心网友 时间:2022-04-23 12:01

super是对继承下来的父类的一种构造,

而this则指代的是本类中或者是父类中拥有的成员

用代码来说吧

pulbic class A{
    String st
    public A(String st){
        this.st = st;
    }
    
    protected void test(){
        System.put.print(st);
    }
}

首先定义了一个A类

在A的构造函数中,有this.st = st;这样一句话

很明显看出在这A类中我是用了两个st变量,一个是作为类本身的成员变量,还有一个是A的构造的形参。那如果我直接在构造里写只st到底用的是谁?是形参,而不是成员变量,对于java而言,当你在某处是用一个变量时,他首先会在当前所处的方法中寻找定义,没有,就去参数中找,再没有,才去成员变量中找。所以当你的参数和成员变量用同一名称时,用this来标记出成员变脸和函数


然后再定义一个B类,B继承了A

pulbic class B extends A{
    String str = "B"
    public B(){
         super("hello java");
         run();
    }
    
    private void run(){
        test();
        System.put.print(str);
    }
}

这里来说super

刚也提到了super就是对父类的构造。

当你在实例化一个B类的对象的时候必须同时实例化他所继承的A下所有的对象及方法

其实就是在你实例化B类的一个对象的时候,系统为B中的对象,变量等分配了内存也就是这时str已经存在了内存中。而A中st系统没有为其分配空间。必须将其也实例化才能为st分配空间,这就是super的作用。

在没有继承的类中可以不写super,或者说写了让其没有参数就行了super()。

热心网友 时间:2022-04-23 13:19

您好,提问者:
this代表的是当前对象,可以是当前对象的方法、变量。
super代表的是父类,说白了就是在子类中通过super关键字来调用父类的东西。

热心网友 时间:2022-04-23 14:53

this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题;this可以调用成员变量,不能调用局部变量;this也可以调用成员方法,但是在普通方法中可以省略this,在构造方法中不允许省略,必须是构造方法的第一条语句。,而且在静态方法当中不允许出现this关键字。
super代表对当前对象的直接父类对象的引用,super可以调用直接父类的成员变量(注意权限修饰符的影响,比如不能访问private成员)
super可以调用直接父类的成员方法(注意权限修饰符的影响,比如不能访问private成员);super可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句。

热心网友 时间:2022-04-23 16:45

this调用当前类的方法或属性,super调用的是父类的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 请问苏州哪里有正规一点专业一点培训教师资格证的啊?一定要正规的哦! java this关键字和super关键字的区别? java 编程 this 和 super 关键字怎么理解比较好? 五行缺金火的女孩是不是将来没有钱财啊? Java中的super 苏州教师资格证有培训的吗? java 中this和super关键词怎么用 苏州教师证培训学院哪家好 Java中的super关键词,说白了就等同于“调用父类构造方法”? java中this和super关键字代表什么?以及它们的三种作用 java构造方法中super()的作用是什么? JAVA中的super代表什么意思?? Java里面super关键字是在子类对象内部指代其父类对象的引用吗? java中super关键字是干嘛的 关键字super在java中的主要作用是什么,如何使用? 为什么我安装了Auto CAD之后打不开?它的文件是.bak形式 你说你解决了,那个BAK文件 怎么打开的啊?我还是打不开! 38厘米的方向盘套能用在39厘米的方向盘吗? 衡阳雁西桥边石鼓往39度方向右转弯压实线直行,算违规吗 维度39°,经度28°,可以找到这个地方的正确方向吗 苏州园区这边教师资*哪里培训的好?有经验的朋友可以帮忙推荐一下? JAVA中super的作用? JAVA中的super() 苏州园区附近有什么比较好的教师资格证培训机构吗? 我是一名苏州一所学校的大专学生 想考教师证 要怎么才能考呢 要出去培训么 有什么好的地方么 大概多少钱 java super的用法 小学的教师证好考么 苏州东奥培训的怎么样? 请问苏州有哪些对外汉语教师的培训班?我只知道一个思诺,还有别的么?哪个比较好比较专业? 怎么把头发做成白色? 怎么做可以让皮肤变白呢? 华为nova2怎么系统更新 为什么我的华为nova手机突然不让我在应用内自己更新需要在应用商店下载? 华为Nova怎么升级最新版本5.0的,求解 童年的期盼的作者和出处 快3软件怎么更新——nova连不上华为手机助手是什么鬼 oppo手机一键清理的时候,怎么让某个软件不被关闭? 安卓系统怎么从7.0升级到8.0,手机是华为Nova青春版 华为nova7需不需要经常进行软件更新,因为手机每次都会自动提醒你去更新? 华为nova5ipor自带钱包软件怎样升级? 华为nova什么时候更新