精华内容
下载资源
问答
  • 关键字super和this的区别
    2022-07-23 17:25:09

    一、this的含义
    this代表所在类的当前对象的引用(地址值),即对象自己的引用

    方法被哪个对象调用,方法中的this就代表哪个对象,即谁在调用,this就代表谁。

    二、this使用格式
    this.成员变量名;
    三、this的作用
    区分成员变量和局部变量,指向成员变量。
    记录当前方法是被哪个对象调用的,哪个对象调用的方法,this就指向哪个对象。
    this可以完成构造方法之间的调用:this(参数列表),调用和传递参数一致的构造方法。
    调用构造方法时this语句必须放在第一行
    两个构造方法之间不能相互调用,否则会导致内存的溢出,编译时直接报错。
    四、super关键字
    如果字类中要访问父类中的成员,可以使用super关键字,在Java中super关键字的作用就是用来在子类中去访问父类的内容。

    五、super使用格式

    1. super.父类成员变量名;2. super.父类成员方法名(参数列表);3. super(参数类别);
      六、this和super关键字的区别
      this表示的本类中的成员,super表示父类中的成员。
      在Java中,this是一个引用变量,保存的是当前调用方法的那个对象的内存地址。
      super就是一个标志性质的关键字,用来标记当前内容属于父类。
    更多相关内容
  • this和super关键字区别

    千次阅读 2021-01-06 15:22:07
    supersuper关键字和this的作用类似,将被隐藏的父类的成员变量成员方法变为可见,或者说用来引用被隐藏的父类的成员成员变量成员方法。 使用场景: 1.使用super和this调用成员变量方法 有时会遇到子类中的...

    一、this和super关键字区别
    1.为什么要使用super?
    子类要访问父类方法或变量。
    子类中调用父类的构造方法。

    this:
    this关键字只能用于方法的方法体内,表示对“调用方法的那个对象”的引用。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态代码块中绝对不能出现this。

    super:
    super关键字和this的作用类似,将被隐藏的父类的成员变量和成员方法变为可见,或者说用来引用被隐藏的父类的成员成员变量和成员方法。

    二、使用场景:
    1.使用super和this调用成员变量和方法

    有时会遇到子类中的成员变量或方法与父类中的成员变量或方法同名。因为子类的成员变量或方法名优先级高,所以子类的同名成员变量或方法就隐藏了父类的成员变量或方法,就需要用到super。看不懂看代码,自己试着理解

    class Country{
        String name;
        void value() {
            name = "china";
        }
    }
    public class City extends Country{
        String name;
        void value() {
            name = "Xian";
            super.value();
            //不调用此方法时,super.name返回的是父类的成员变量的值null
            System.out.println(name);
            System.out.println(super.name);
        }
        public static void main(String[] args) {
            City c=new City();
            c.value();
        }
    }
    //运行结果:
    //Xian
    //china
    

    为了在子类中引用父类中的成员变量name和方法value(),在代码中使用了super、super.name和super.value()。若不调用super.value(),super.name返回父类的成员变量默认值null,调用此方法时,super.value()方法把成员变量name赋值为China,再利用super.name调用父类的成员变量的值。另外,要注意的是super.name 调用的是父类的成员变量的值

    class Country{
        String name="shanxi";
        String value(String name) {
            name = "china";
            return name;
        }
    }
    
    public class City extends Country{
        String name;
        String value(String name) {
            name = "Xian";
            super.value("失败");
            //不调用此方法时,super.name返回的是父类的成员变量的值null
            System.out.println(name);
            System.out.println(super.name);
            return name;
        }
        public static void main(String[] args) {
            City c=new City();
            c.value("成功");
        }
    //Xian
    //shanxi
    

    此时,super.name返回的值是父类成员变量的值shanxi,而此时的super.value()方法是不起作用的。

    2.用super和this调用构造方法

    
    class Person{
        public static void prt(String s){
            System.out.println(s);
        }
        Person(){
            prt("A Person");
        }
        Person(String name){
            prt("A Person name is:"+name);
        }
    }
    
    
    public class Chinese extends Person{
        Chinese(){
            super();//调用父类的无参构造方法(1)
            prt("A chinese");//(4)
    
        }
        Chinese(String name){
            super(name);//调用父类具有相同形参的构造方法(2)
            prt("his name is:"+name);
        }
        Chinese(String name,int age){
            this(name);//调用当前子类中具有相同形参的构造方法(3)
            prt("his age is:"+age);
    
        }
    
        public static void main(String[] args) {
            Chinese cn=new Chinese();
            cn=new Chinese("zhiwen");
            cn=new Chinese("zhiwen",38);
    
        }
    
    //A Person
    //A chinese
    //A Person name is:zhiwen
    //his name is:zhiwen
    //A Person name is:zhiwen
    //his name is:zhiwen
    //his age is:38
    

    在这段代码中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了新的变化。super后加参数表示用来调用父类中具有相同形式的参数的构造方法,如(1)和(2)处。this后加参数表示调用的是当前类具有相同形式参数的构造方法,如(3)处。当然,在Chinese的各个重载构造方法中,this和super的一般用法仍可使用,比如(4)处,你可以将它替换为“this.prt”(因为它继承了父类中的那个prt方法)或者使用“super.prt”(因为它父类中的方法且可以被子类访问到),他照样可以运行,但这样似乎有点画蛇添足的感觉。

    3.子类的构造方法如果要引用super的话,必须把super放在方法的首行

    class Base{
        Base(){
            System.out.println("Base");
        }
    }
    public class Checket extends Base{
        Checket(){
            super();//调用父类的构造方法,一定要放在这个方法的首个语句
            System.out.println("Checket");
        }
    
        public static void main(String[] args) {
            Checket c=new Checket();
    
        }
    //Base
    // Checket
    }
    
    

    如果想使用super调用父类构造的方法,但是没有放在第一行的话,那么在super之前的语句,肯定是为了满足自己想要完成某些行为的语句,但是又用super调用父类的构造方法,那么以前所做的修改就都回到以前了,就是说又成了父类的构造方法了。

    总结
    1.不能同时出现在一个同一个构造函数调用其他构造函数
    super(参数):调用父类中的某一个构造方法,应该为构造方法中的第一条语句。
    this(参数):调用本类中另一种形式的构造方法,应该为构造方法中的第一条语句。
    this()和super()不能同时出现在一个构造方法里面,因为this必然会调用其他构造方法,其他构造方法中必然也会有super语句的存在,在同一个构造方法里面有相同的语句就失去了语句的意义,编译也不会通过。
    2.调用构造函数的区别:
    super:引用当前对象的直接父类中的成员,用来访问直接父类中被隐藏的成员变量或方法。父类与子类中有相同的成员时使用,如:super.变量名或super.成员方法名(实参)。
    this:代表当前对象名,在程序中易产生二义性之处,应使用this来指明当前对象。如果方法的形参与类中的成员变量同名,这时需用this来指明成员变量名。
    3.使用的前提不一样:
    super关键字必须要有继承才能使用;
    this关键字不需要存在继承也可以使用。
    4.其他:
    调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含的调用super(),如果父类中
    没有这种构造方法,那么在编译的时候会报错。

    this和super都指的是对象,所以均不可以在static方法中使用。

    展开全文
  • 一.this关键字 this: this代表本类的引用,或者是指该类的一个对象,代表着方法的调用者,哪个对象调用的这个方法,方法中的this就代表这个对象.例如set,get 方法中的this: public class Teacher { //定义私有成员...

     目  录 

    一.this关键字

    this:

    为什么要有this关键字呢?

    在非静态方法中,始终隐藏着一个对象this:

    this关键字什么时候不能省略呢?

    二.super关键字​

    super:

    为什么new子类会先调用父类的  构造方法  ?​

    super关键字什么时候不能省略呢? 

     三.this关键字和super关键字的区别​

    this关键字和super关键字的相同点!


    一.this关键字

    this:

            this代表 本类的引用 ,或者是指该类的一个对象,代表着方法的调用者,哪个对象调用的这个方法,方法中的this就代表这个对象.例如set,get 方法中的this:

    public class Teacher {
        //定义私有成员变量
        private String name;
        private int age;
       
        //get,set方法中的this就代表了Teacher这个当前类,Teacher这个类调用的name这个属性
        public void setName(String name){
            this.name=name;                
        }
        public String getName(){
            
            return name;
        }
    
        public int getAge() {
            
            return age;
        }
    
        public void setAge(int age) {
            
            this.age = age;
        }
    
    }
    

    为什么要有this关键字呢?

    当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题,如下图:

    如果加入了this关键字,就会有如下效果: 

    在非静态方法中,始终隐藏着一个对象this:

    public class Test2 {
        int num=90;  
    
        public void a(){         
            System.out.println(this.num);      //这个this加或者不加都不会报错!
        }
    }
    

    this关键字什么时候不能省略呢?

    在实例方法(例如set和gat方法)中或者构造方法中,需要区分局部变量和实例变量时,this便不能省略.

    补:当前构造方法需要调用另一个本类构造方法时,"this();"这个语句需要放在构造方法的第一行.

    二.super关键字

    super:

            在类的方法中使用,代表 父类的空间表示或者父类的引用 .在子类中的方法使用super,可以 访问父类的数据(成员变量,成员方法).

    为什么new子类会先调用父类的  构造方法  ?

    每个子类的构造方法中的第一行,都有一条默认的super();语句去调用父类的空参构造方法先来完成父类的初始化.所以new子类时会先执行默认的隐藏的super();语句,就会先调用父类的构造方法.

    public class Fu {      //定义父类
        public Fu(){
            System.out.println("父类构造方法执行了");
        }
    }
    public class Zi extends Fu {       //定义子类继承Fu类
        public Zi(){ 
            System.out.println("子类构造方法执行了");
        }
    }
    public class Test3 {
        public static void main(String[] args) {
            Zi z=new Zi();      //创建了一个子类对象
        }
    }

    输出结果:

    super关键字什么时候不能省略呢? 

    ​​​​​​​子类与父类中存在同名的变量或属性,如果在子类中访问父类中的属性,那么super不可以省略!

     三.this关键字和super关键字的区别

    • this代表的是本类对象的引用
    • 调用成员变量 :       this.成员变量         调用本类的成员变量
    • 调用构造方法 :      this()     调用本类的无参构造方法    this(...)        调用本类的有参构造方法
    • 调用成员方法 :     this.成员方法         调用本类的成员方法
    • this可以单独使用.      例如System.out.println(this);

     

    • super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
    • 调用成员变量 :       super.成员变量     调用父类的成员变量
    • 调用构造方法 :      super()    调用父类的无参构造方法   super(...)       调用父类的构造方法
    • 调用成员方法 :     super.成员方法     调用父类的成员方法
    • super不可以单独使用,必须带一个.    例如:System.out.println(this);

    注意:this();与super();两个不可共存,都存在的化会编译报错.

    this关键字和super关键字的相同点!

    • 都可以存在实例方法和构造方法中.
    • 都不能使用在静态方法中.
    • 大部分情况下可以省略.
    • 只能出现在构造方法的第一行.

    (小编也在努力学习更多哟!以后会多多分享哒!)

    希望对友友们有所帮助!!!!

    展开全文
  • java代码中方法就是一种封装,把实现的过程封装起来... 读写接口公有化:在类中提供通过public关键字修饰的gettersetter方法,来实现获取修改属性的值,在方法内部也可以添加逻辑判断。 封装的好处:隐藏实现的...

    1.  this关键字:

                    Ⅰ.  this的用处:可以表示当前对象。

                    Ⅱ.  this关键字的用法:(1).  " this . 属性 "表示当前属性。

                                                          (2).  " this . 方法( 参数列表 )"表示当前方法。

                                                          (3).  " this()"表示调用当前类的无参构造。

                                                          (4).  " this( 参数列表 ) "表示调用当前类的带参构造。

                    如果要在一个类中的构造方法中调用其他构造方法,如:

                            (1).  在一个类的无参构造方法中调用该类的带参构造方法,就需要在无参构造方法中写" this ( 带参构造的参数列表 ); "语句,我们可以通过不同的参数列表调用不同带参构造方法。

                             (2).  在一个类的带参构造方法中调用该类的无参构造方法,就需要在带参构造方法中写" this ( ); "语句。

                    注意:在构造方法中使用this关键字调用其他构造方法时,this语句必须写在第一行。

     

    2.  super关键字:

                    Ⅰ.  super的用处:super表示父类的,因此super关键字常用在父子类中。

                    Ⅱ.  super关键字的用法:(1).  " super . 属性 "表示调用父类中的属性。

                                                              (2).  " super . 方法( 参数列表 )"表示调用父类的方法。

                                                              (3).  " super( )"表示调用父类的无参构造方法,当创建子类对象的时候,默认会调用父类的无参构造方法。

                                                              (4).  " super( 参数列表 )"表示调用父类的带参构造。

                    在子类的构造过程中不管是无参构造还是带参构造,都默认会调用父类的无参构造方法,如果父类没有构造方法,可以使用super( [ 参数列表 ] )引入;如果也不使用super引入,则系统就会报错。如果构造子类的无参构造,就使用" super( )语句 "调用父类的无参构造方法;如果构造子类的带参构造,就使用" super( 参数列表 ) "语句调用父类的带参构造方法。

                    注意:在子类的构造方法中使用super关键字调用父类构造方法时,super语句必须写在第一行。因此,在构造方法的相互调用过程中:this关键字和super关键字只能出现一个。

    展开全文
  • this关键字和super关键字区别

    千次阅读 2018-12-26 23:52:48
    this表示当前对象:  this.属性 区分成员变量局部变量  this.() 调用本类的某个方法 ... this关键字只能出现在非static修饰的代码中  super表示父类对象:  super.属性 表示父类对象中的成员变量...
  • 先简单介绍一下this 和super 一、this  this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。  this的用法在java中大体可以分为3种: 1、普通的直接引用 this相当于是指向当前对象本身。 2...
  • 2.this和super区别: 代表的对象不同: this:代表本身调用者这个对象 super:代表父类对象的引用 前提: this:没有继承也可以使用 super:只能在继承条件下才可以使用 构造方法: this();调用本类的构造 ...
  • this关键字 this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 this的用法在java中大体可以分为3种: 1.普通的直接引用,this相当于是指向当前对象本身。 2.形参与成员名字重名,用...
  • super关键字用法 在子类的成员方法中,访问父类的成员变量。 public class Fu { int num = 10; } public class Zi extends Fu{ int num = 20; public void methodZi(){ System.out.println("子类中的num:" + ...
  • this和super关键字区别

    2021-11-27 17:25:54
    一、this和super关键字区别 this表示当前对象: this.属性 区别成员变量局部变量 this.() 调用本类的某个方法 this() 表示调用本类构造方法,只能用在构造方法的第一行语句。 this关键字只能出现在非static修饰的...
  • this关键字this的三大作用:this调用属性,调用方法,表示当前的对象 this是对当前对象的引用,是运行期间当前对象本身。 (1).可以使用this明确的访问当前对象的属性或者方法,类似于“我”。 (2).this()...
  • 注意:使用super关键字和this关键字,均不能用在静态方法中,只能用在普通方法(实例方法)中。 访问属性: 示例: 父类 public class FatherClass{ public int age=18; } 子类 public c
  • thissuper关键字讲解

    2020-12-17 21:40:12
    一、this关键字 this是一个引用,它指向自身的这个对象。 看内存分析图: 假设我们在堆内存new了一个对象,在这个对象里面你想象着他有一个引用thisthis指向这个对象自己,所以这就是this,这个new出来的...
  • super/this关键字比较定义区别使用方法superthis 定义 super关键字通过子类访问父类,有三种用法: 通过子类的方法,访问父类的成员变量,成员函数,构造函数。 this 关键字用来访问本类内容,用法也有三种: 在本类...
  • Java中的this和super关键字全面解析

    千次阅读 2021-02-26 08:22:19
    一、this和super关键字区别this表示当前对象:this.属性 区别成员变量局部变量this.() 调用本类的某个方法this() 表示调用本类构造方法,只能用在构造方法的第一行语句。this关键字只能出现在非static修饰的代码中...
  • ,让大家了解关键字super和this的作用,关键字super和this区别,以及简单介绍一下superL()和this()。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。关键字super和this是什么?有什么区别this...
  • 关键字this和super区别

    万次阅读 多人点赞 2018-08-29 23:39:48
    1.this关键字  (1.)每个类的每个非静态方法(没有被static修饰)都会隐含一个this关键字,它指向调用这个方法的对象;当在方法中使用本类属性时,都会隐含地使用this关键字,当然也可以明确使用。  this可以看成...
  • this关键字super关键字详解

    万次阅读 多人点赞 2018-02-02 12:17:03
    一.this关键字 1.实例一: (1)需求:使用Java类描述一个动物; (2)实例: class Animal{ String name; //成员变量 String color; public Animal(String n,String c){ name = n; color = c; } ...
  • 虽然我们知道this可以调用成员变量成员方法,但Java语言中最常规的调用方式是使用“对象.成员变量(或方法)"进行调用。 (2)在局部变量或方法参数覆盖了成员变量时,添加this关键字明确引用的是类成员还是局部...
  • this关键字代表自身类的对象 使用this可以引用成员变量成员方法 例: public class Demo { int num=0; //成员变量 public Demo(int num){ //有参构造 this.num=num; } public Demo(){ //在无参构造方法...
  • this关键字 一、概念 this: 存储的“当前对象”的引用 this可以访问:本类的成员属性,成员方法,构造方法 二、this关键字的用法 1、this访问本类的成员变量 class Student{ //成员属性 String name; ...
  • 本篇我们介绍Java中的super和this关键字,以及浅浅提一下final的注意点。
  • Java基础11(继承中关键字super和this)

    千次阅读 2021-11-15 20:56:19
    在了解完毕构造器之后,我们就知道关键字super和this的作用了
  • 在一个类的方法内部,如果我们想调用其成员变量,不用 this,我们会怎么做? 看上面的代码,我们在 ThisTest 类中创建了一个成员变量 name 属性,然后创建了一个 setName 方法,注意这个方法形参也是 String name...
  • java中关键字super和this

    2018-06-22 21:42:27
    1.super关键字:(1)子类构造方法调用父类构造方法:super()class B{ public B() { System.out.println("1*****"); } } public class A extends B { public A() { super(); }  }输出结果:1*****...
  • super关键字 子类对象的创建过程: 子类的构造方法中,默认先调用父类的无参构造方法。如果没有显示的调用,那么隐含着super()。 super关键字: 可以访问父类的属性 可以访问父类的方法 指代父类的构造方法...
  • super关键字 super关键字的用法有三种: 1.在子类的成员方法中,访问父类的成员变量。 2.在子类的成员方法中,访问父类的成员方法。 3.在子类的构造方法中,访问父类的构造方法。 public class Zi extends Fu { ...
  • this super区别、用法及注意 this 用法一: 访问调用本类的属性方法(受访问属性限制) 实现: this.XX 用法二: 在本类的构造方法中调用本类的另一个构造方法,从而达到构造方法的代码共享。实现:...
  • this和super在调用构造方法时,必须出现在构造方法的第一行 当构造方法中不调用别的构造时,系统会默认调用父类的空参构造,当我们手动调用构造后,系统就不会再调用父类的空参构造了 每个构造方法中只能调用一个this...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,345
精华内容 62,138
热门标签
关键字:

关键字super和this的区别