精华内容
下载资源
问答
  • package com.cj.study.thissuper; public class Student{ public String name; public void setName(String name) { this.name = name; } public String getName() { return name; } } ...

    铁子们,快扫码关注啦!或 wx搜索:“聊5毛钱的java”,关注可领取博主的Java学习视频+资料,保证都是干货

    今天就用最通俗易懂的大白话来聊一聊Java中的this和super以及this()和 super()

    1、this关键字

    package com.cj.study.thissuper;
    
    public class Student{
    	
    	public String name;
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public String getName() {
    		return name;
    	}
    
    }
    

    上述代码是很常见的javabean的定义,里边经常会出现this这个关键字

    那有思考过为什么这里需要用this这个关键字吗?

    为了更简单的解释这个问题,将上述的代码改一下

    把set方法里的this.name的this去掉,变成了name=name,就会发现个问题,这2个name都是局部变量的name,这就变成了局部变量给局部变量赋值了, 但是咱们是想给对象的name赋值,并不是想给局部变量赋值,由于名称一样导致区分不出来了

    所以必须用this来区分一下;当然如果两个不重名的话,name=nnn 这种的不加this是没问题的,这是因为它是先在局部找变量,如果找到了就用局部变量,没找到就去找全局变量。

    那这个this到底是啥呢?

    this是当前对象的引用,就是说当前用构造函数建的对象是谁,这个this就代表谁,它是一个引用

    另外一个问题,如果构造函数想调用另一个构造函数该怎么办呢?

    这个时候就需要使用this()了

    注意:如果在构造函数里调用其他重载的构造函数时,则,被调用的那个构造函数必须放在代码的第一行

    下边是示例:

    正确的

    错误的

    2、super关键字

    上述例子是父类里定义了一个字段是num,子类里没有定义,所以最后的输出结果是showNum=4

    但是如果子类也定义了一个num值为5,那打印出来的一定是5,因为在调用成员(成员变量和成员方法)时如果不特殊标明,前边其实默认省略了this,他默认调用的是子类的

    但是如果这时候我就想用父类的不想用子类的,怎么办

    这时候又出现了区分不出来的情况,所以要用super来标明你要调用父类的,而不是子类的

    当只有父类有,子类没有的情况下,则调的是父类的(因为子类继承了父类,子类就拥有了父类除了私有外的所有东西)

    当父类和子类都有的情况下,默认调用的是子类的,但是用super标明了以后调的是父类的

    如上图所示,this和super的引用是这样指向对象的成员变量和方法:

    this不仅指向了子类的成员变量和方法,它还指向了子类从父类继承过来的变量和方法

    而super仅仅只是指向了子类从父类继承的成员变量和方法。

    那如果子类构造函数想调用父类的构造函数,怎么办?

    这时候就要用到super();了

    *****注意:在子类的构造函数里都必须去调用父类的构造函数,你不写其实第一行都有一个隐式的super();

    如果父类里不定义无参的构造的话子类的构造函数会报错,所以说明在子类的构造函数默认的都有一句隐式的super();

    你的构造函数里默认的都有一个隐式的super();去调用父类无参的构造,但是如果你的构造函数里不想调用默认的父类无参构造,而是想调用父类其他的构造函数,则你可以显式的写出来,而且如果你写了则调用父类的supper(xxx) 必须放在第一行

    以上就是对this和super的一些总结,可能有点乱,但是还是希望对大家有所帮助

    铁子们,如果觉得文章对你有所帮助,可以点关注,点赞

    也可以关注下公众号:扫码或 wx搜索:“聊5毛钱的java”,欢迎一起学习交流,关注公众号可领取博主的Java学习视频+资料,保证都是干货

    3Q~

    纯手敲原创不易,如果觉得对你有帮助,可以打赏支持一下,哈哈,感谢~

               

    展开全文
  • this和super的区别各自的作用?

    千次阅读 2019-05-27 20:34:17
    this访问本类中的属性,如果本类没有此属性则从父类中继续查找。super访问父类中的属性。 2.方法的区别: this访问本类中的方法,如果本类没有此方法则从父类中继续查找。super访问父类中的方法。 3.构造的区别: ...

    一、二者的区别

    1.属性的区别:
    this访问本类中的属性,如果本类没有此属性则从父类中继续查找。super访问父类中的属性。
    2.方法的区别:
    this访问本类中的方法,如果本类没有此方法则从父类中继续查找。super访问父类中的方法。
    3.构造的区别:
    this调用本类构造,必须放在构造方法的首行。super调用父类构造,必须放在子类构造方法首行。
    4.其他区别:
    this表示当前对象。super不能表示当前对象
    A、this. 变量和super.变量
    this.变量 调用的当前对象的变量;
    super.变量 直接调用的是父类中的变量。
    B、this(参数)和super(参数)方法
    this(参数) 调用(转发)的是当前类中的构造器;
    super(参数) 用于确认要使用父类中的哪一个构造器。

    二、注意点:

    1)在对拥有父类的子类进行初始化时,父类的构造方法也会执行,且优先于子类的构造函数执行;因为每一个子类的构造函数中的第一行都有一条默认的隐式语句super();
    2)this() 和super()都只能写在构造函数的第一行;
    3)this() 和super() 不能存在于同一个构造函数中。第一,this()和super()都必须写在构造函数的第一行;第二,this()语句调用的是当前类的另一个构造函数而这个另一个构造函数中必然有一个父类的构造器,再使用super()又调用一次父类的构造器, 就相当于调用了两次父类的构造器,编译器不会通过;
    4)this和super不能用于static修饰的变量,方法,代码块;因为this和super都是指的是对象(实例)。

    展开全文
  • this和super

    千次阅读 2015-04-17 16:08:44
    在使用super 和this关键字时,以下描述正确的是(A) A) 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过 B) super()和this()不一定要放在构造...

    基础面试题:

    在使用super 和this关键字时,以下描述正确的是(A)
    A) 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
    B) super()和this()不一定要放在构造方法内第一行
    C) this()和super()可以同时出现在一个构造函数中
    D) this()和super()可以在static环境中使用,包括static方法和static语句块

    下面文章转载自:http://www.cnblogs.com/aijianiula/archive/2012/06/01/2531251.html

    super和this的异同:

     1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) 

     2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
     3)super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名    super.成员函数据名(实参)

     4)this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)

    5)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错

    6)super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。

    7)super()和this()均需放在构造方法内第一行。

    8)尽管可以用this调用一个构造器,但却不能调用两个。

    9)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

    10)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

    11)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

    展开全文
  • Java中this和super的区别

    千次阅读 2021-02-05 13:59:40
    JavaSE基础之this和super的区别

    this

    • this代表对象本身,相当于是对象自身的一个指针。

    • this的三种用法:

      • 1 直接引用对象本身。
      • 2 形参与成员名字重名,用this来区分。
      • 3 引用本类的构造函数。
    • 测试:

    public class Test {
        public static void main(String[] args) {
            Person p=new Person();
    
            //this直接引用
            System.out.println(p);//打印p对象的地址
            p.soutThis();//调用p对象中打印this的方法 可以发现,二者完全一致
    
        }
    }
    class Person{
    
        int sex;
        int age;
    
        public Person(){
    
        }
    
        public Person(int sex){
            //此处 形式参数和成员变量重名,this.sex代表该对象的成员变量
            this.sex=sex;
        }
    
        public Person(int sex,int age){
            //这里this代表引用本类中的构造方法
            this(sex);
            this.age=age;
        }
    
        public void soutThis(){
            //此处打印对象自身的地址
            System.out.println(this);
        }
    
    }
    

    super

    • super代表父类对象(离自己最近的一个父类),相当于是父类的一个指针。

    • super的三种用法:

      • 1 直接引用父类。
      • 2 子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分。
      • 3 引用父类构造函数
    • 测试:

    public class Test {
        public static void main(String[] args) {
            Orange orange=new Orange(5,"orange","Lorange");
        }
    }
    class Orange extends Fruit{
        String name;
    
        public Orange(int size,String color,String name){
            //调用父类的构造方法
            super(size,color);
            this.name=name;
        }
        
        public void info1(){
            //此处super用于区分子类与父类名字相同的成员变量
            System.out.println(this.name);
            System.out.println(super.name);
        }
    
        public void info2(){
            //此处super直接引用父类的成员变量
            System.out.println(super.size);
        }
    
    }
    class Fruit{
        int size;
        String color;
        String name;
    
        public Fruit(){
            
        }
        
        public Fruit(int size,String color){
            this.size=size;
            this.color=color;
        }
    
        public Fruit(int size,String color,String name){
            this.size=size;
            this.color=color;
            this.name=name;
        }
    }
    

    注意事项:

    • (1)使用super调用父类中的某一个构造函数时,该语句应该为构造函数中的第一条语句。

    • 使用this调用本类中另一种形式的构造函数,该语句应该为构造函数中的第一条语句。

    • (2)thissuper对成员方法和成员变量的使用是一样的。

    • (3)thissuper都是指的对象实例,所以不能再任何static语句中使用。

    • (3)不能使用this调用两个构造方法。

    • (4)his和super不能同时出现在一个构造函数里面。

      • 因为每一个子类的构造函数中的第一行都有一条默认的隐式语句super();this调用的其它构造方法必然也会有这条语句,这样就会冲突,失去了语句本身的意义。
    二者本质上的区别就是代表的对象不同,一个代表自身,一个代表父类。二者的使用上类似。
    展开全文
  • 简述java中this和super关键字的区别和作用

    千次阅读 多人点赞 2019-04-09 08:58:20
    在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,...
  • 浅谈this和super()

    千次阅读 2018-10-20 17:30:43
    一直对this和super()关键字在使用方面理解方面都不太清楚,根据以往经验各种资料总结出以下内容: java代码中要对象实列化时,至少有一条从本类出发到Object的通道,而这条通道的开辟者主要就是this和super,...
  • this和super关键字 this是自身的一个对象,代表对象本身可以理解为指代当前的对象,它可以调用当前对象的属性、方法构造方法,一般情况下可以省略,必须使用this的地方是区分出现名字重复的参数属性 与this...
  • java中关键字this和super的用法区别

    千次阅读 2019-03-18 20:37:38
    this和super的用法以及它们的区别在这里做了一些整理,大家可以参考使用 1. thisthis是自身的一个对象,以下是几种用法: 1.1.当形参与成员变量重名时,用this来区分,this.name 代表类的成员变量 1.2.引用构造...
  • java中this和super的用法区别

    千次阅读 多人点赞 2019-06-03 22:12:53
    java中this和super的用法区别 this this是自身的一个对象,代表对象本身,用法大致分为以下3类: 1、普通直接引用当前对象本身 2、形参成员名重名,用this来区分 3、引用构造方法 ,this(参数) ,应该为构造函数...
  • java中this和super的区别

    千次阅读 2019-07-18 11:43:28
    this关键字: 一.this是什么? this是一个引用类型, 在堆中的每一个java对象上都有thisthis保存内存地址指向自身。 二.thisthis()能用在哪些地方? this可以用在成员方法中. this()可以用在构造方法中.语法: ...
  • super关键字;this和super的区别

    千次阅读 2014-12-16 15:39:55
    在Java中,this关键字可以调用当前类中的属性、方法构造方法。使用super关键字可以在子类中引用父类的属性、方法构造方法。主要的使用形式有以下几种: ...比较this和super 比较 this super
  • 关键字this和super的区别

    万次阅读 2018-08-29 23:39:48
    1.this关键字  (1.)每个类的每个非静态方法(没有被static修饰)都会隐含一个this关键字,它指向调用这个方法的对象;当在方法中使用本类属性时,都会隐含地使用this关键字,当然也可以明确使用。  this可以看成...
  • this和super的使用其实很简单,不过有些猿们啊,查看了很多资料后,还是不得要领。 好吧,那我就在众望下整理出秘籍,供猿们修练~~~ 此乃家居出行面试互侃必备啊 this this 表示当前对象 使用上细分的话,...
  • Java中this和super的用法总结

    千次阅读 2017-02-25 10:56:25
    开始学习Java的时候,遇上了super和this,刚开始的傻傻分不清楚怎么回事,看了一篇很不错的博文,顿时豁然开朗。   这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位...
  • Java中的this和super参数

    千次阅读 2019-03-27 19:22:21
    在Java中,无论程序员是否在实例方法中添加,编译器都会自动往实例方法中加入一个this参数,this参数的类型为方法所在类的类型。 假设说fun() 是类中的一个方法,当调用这个方法的时候,编译器会把它变为this.fun...
  • 文章目录PyQt5学习笔记04—— this和super的用法总结1. this1.普通的直接引用2.形参与成员名字重名,用this来区分:3.引用构造函数2. super1.普通的直接引用2.子类中的成员变量或方法与父类中的成员变量或方法同名3....
  • this 和super 关键字的区别

    千次阅读 2017-01-09 16:12:59
    属性的区别:this访问本类中的属性,如果本类没有此属性则从父类中继续查找。super访问父类中的属性。 方法的区别:this访问本类中的方法,如果本类没有此方法则从父类中继续查找。super访问父类中的方法。 构造的...
  • this代表当前类的对象引用。super代表弗雷呢存储空间的标识(可以理解为父类的引用,通过这个可以访问父类的成员)。 场景: 成员变量: this.成员变量 super.成员变量 构造方法: this(....) super(....) ...
  • Java中this和super关键字的用法

    千次阅读 2018-01-11 10:01:04
    在Java中,this和super关键字比较常用,这两个关键字有许多共通的地方。this指的是当前对象,super指的是父类对象。this和super分别有两种用途,this的一种用途是引用当前对象的属性或方法;另一种是调用该类的其他...
  • 1.this&super 什么是this,this是自身的一个对象,代表...要注意的是this只能在类中的非静态方法中使用,静态方法静态的代码块中绝对不能出现this。his也可作为构造函数来使用。在后面可以看到 而什么是super,可以
  • javascript中this和super用法

    千次阅读 2014-08-03 20:17:46
    "this",作为一个特殊的关键字,它的规则如下:  1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。  2。可以在一个类的非static成员内部...
  • 关键字this可以调用本类的构造器或方法,关键字super可以调用父类的构造器或方法。 使用this调用本类其他构造器或使用super调用父类构造器时,thissuper必须放在构造器中的第一行,而且一个构造器最多存在一个this...
  • JAVA 中的super()和this()作用

    千次阅读 2013-10-08 15:23:41
    要说super就先要说this。 "this",作为一个特殊的关键字,它的规则如下: 1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。 2。可以在一个...
  • this和super关键字的区别(Java)

    千次阅读 多人点赞 2018-08-26 05:59:43
    一、Java当中this和super的区别: 1.属性的区别: (1)this访问本类中的属性,如果本类没有这个属性则访问父类中的属性。 (2)super访问父类中的属性。 2.方法的区别: (1)this访问本类中的方法,如果本类...
  • 如果一个类继承了其他类,那么在初始化的时候,super默认先调用父类的无参...而在构造函数中,this调用的是其他构造函数,而其他构造函数中也有super存在,这样就存在两个super,意味着父类的两次初始化,这不安全。...
  • Android中this和super的区别

    千次阅读 2018-03-17 16:33:59
    在Java中,this通常指当前对象,super则指父类的。当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一...
  • this super

    千次阅读 2011-11-08 06:16:56
    this和super的区别 No. 区别 this super 1 操作属性 this.属性:表示调用本类中的属性,如果本类中的属性不存在,则从父类查找 super.属性:表示调用父类中的属性 ...
  • java中thissuperthis()、super()的用法区别

    千次阅读 多人点赞 2018-05-08 12:26:42
    this关键字:一.this是什么? this是一个引用类型, 在堆中的每一个java对象上都有thisthis保存内存地址指向自身。二.thisthis()能用在哪些地方?this可以用在成员方法中.this()可以用在构造方法中.语法: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,135,120
精华内容 454,048
关键字:

this和super的作用