精华内容
下载资源
问答
  • super和this
    千次阅读
    2019-05-23 14:18:17

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

    这道题的正确选项是 A
    分析 :

    1. super() ,this() 和super, this关键字不是一个概念, 前者是在构造器之间相互调用的语法, 后者是代之父类或者本类的对象
    2. 每个构造器默认的第一行都是super(), 但有时候父类没有无参构造, 那么就必须在子类构造的第一行显式的声明要调用哪个构造器
    3. this() 和 super() 都必须出现在构造器中的第一行, 所以两者不可能出现在同一个构造器中.
    4. this和super都不能出现在静态方法或静态块中

    为什么要放在第一行 ?
    1. super() 防止子类后面调用父类属性, 在第一行就初始化父类
    2. this() 自带调用super(), 出现在第一行, 保证父类初始化的唯一性, 不然会多次重复初始化

    ~~

    以下是super和this关键字的详细解释

    ~~

    this 关键字

    this关键字可以出现在构造方法和实例方法中, 不能出现在静态方法中, 这是因为静态方法可以用类名来调用, 这时可能还没有对象.
    this主要有两种用法 :

    • 用在构造方法中, 调用本类的其他构造方法, 格式为 this(), 通过this调用本类的其他构造方法时, 该语句必须出现在构造方法中, 并且必须作为第一条语句出现
    • 代指当前对象
      例如 :
    public class Person {
        private String name;
        private int age;
        private String gender;
        public Person(){} //构造方法一
        public Person(String name,int age){ //构造方法二
            this(name,age,null);
        }
        public Person(String name, int age1, String gender){ //构造方法三
            this.name = name;//因为参数与类中的成员变量名相同, 所以用this.name来表示成员变量
            age = age1; //因为参数与类中的成员变量名不同, 所以可以不使用this
            this.gender = gender;
        }
    }
    

    super关键字

    super关键字有两种用法 :

    • 在子类的构造方法中使用super关键字调用父类的构造方法, super语句必须是该子类构造方法中的第一句.
      如果在子类中没有使用super关键字, 系统会默认调用父类没有参数的构造方法, 即隐含的使用super().
      注意这时父类一定应该有一个无参的构造方法
    • 使用super关键字调用被子类隐藏的成员变量和方法, 如果子类定义了和父类具有相同名字的成员变量, 子类就隐藏了从父类继承的成员变量. 如果子类定义的某个方法与父类定义的某个方法完全相同, 从父类继承的该方法就被override
    更多相关内容
  • system verilog中super和this用法示例

    千次阅读 2020-11-27 15:30:03
    在system verilog中经常会遇到super和thissuper用来获取超类的成员变量、函数等,this作用是先在当前作用域内寻找对应的参数,接着在上一级作用内寻找,直到找到该变量为止. 1.定义new_reg_xactionnew_xaction ...

    在system verilog中经常会遇到super和this;super用来获取超类的成员变量、函数等,this作用是先在当前作用域内寻找对应的参数,接着在上一级作用内寻找,直到找到该变量为止.
    1.定义new_reg_xaction和new_xaction
    new_xaction继承于new_reg_xaction,类中都定义了m_reg_addr.
    在这里插入图片描述
    在这里插入图片描述
    2.示例
    在环境中例化new_xaction,随机化之后调用get_super_addr,从打印信息中可以看出,this.m_reg_addr获取的是new_xaction中的值,super.m_reg_addr获取的是new_reg_xaction中的值
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • super和this关键字详解

    万次阅读 2020-10-12 17:12:09
    super关键字: ① java中提供了访问父类的成员变量,成员方法的关键字super super.成员变量 super.成员方法(【参数1,参数2***】) ② super关键字调用父类的构造方法 super(【参数1,参数2***】) 调用...

    super关键字:

    java中提供了访问父类的成员变量,成员方法的关键字super
    super.成员变量
    super.成员方法(【参数1,参数2***】)
    super关键字调用父类的构造方法
    super(【参数1,参数2***】)
    调用父类构造方法的代码 必须位于子类构造方法的第一行,并且只能出现一次
    子类的构造方法一定会调用父类的构造方法,如果将子类构造方法中不指定调用父类的哪个构造方法,那么就会默认调用父类的无参的构造方法。
    在类的继承中,子类的构造方法中默认会有super()语句存在,相当于执行父类的相应构造方法中的语句
    例如:
    class Animal {
        public Animal(String name) {//构造方法1
            System.out.println("我是"+name);
        }
        public Animal(String name,int age){//构造方法2
            System.out.println("我是"+name+"年龄"+age);
        }
        public Animal() {
            System.out.println("tom");
        }
        public void say(){
            System.out.println("learn");
        }
    }
    
    class Dog extends Animal{
        public Dog(){
            //super();  //默认会有该语句,所以此句多余,可以省略
            super("张三",12);//调用父类的构造方法2        // 调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次,
            //super("沙皮狗");调用父类的构造方法1
            //super.say();调用父类的say()方法
        }
    }
    
    public class Example{
        public static void main(String[] args) {
            Dog dog=new Dog();//new Dog()实例化对象时,会调用构造方法 Dog()
        }
    }
    

    super和this的异同:

    • super(参数):调用基类(父类)中的某一个构造函数(应该为构造函数中的第一条语句) 
    • this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
    • super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名    super.成员函数据名(实参)
    • this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)
    • 调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
    • super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。
    • super()和this()均需放在构造方法内第一行。
    • 尽管可以用this调用一个构造器,但却不能调用两个。
    • this()和super()不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
    • this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
    • 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
    //super()根据参数的个数不同,调用基类(父类)的构造方法
    //this()根据参数的个数不同,调用本类中的其他的构造方法

    展开全文
  • super和this的区别

    千次阅读 2017-11-10 19:31:50
    参考博客:https://www.cnblogs.com/hasse/p/5023392.html http://blog.csdn.net/zuoyang1990/article/details/53471494thisthis是自身的一个对象,代表...this的用法在java中大体可以分为3种: 1、普通的直接引用
     
    参考博客:https://www.cnblogs.com/hasse/p/5023392.html 
    

                      http://blog.csdn.net/zuoyang1990/article/details/53471494

    this

    this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。

    this的用法在java中大体可以分为3种:

     1、普通的直接引用

              

    /**
     * 当在一个类中明确指出使用对象自己的变量或函数时需加上this的引用
     *
     */
    class Hello{
    	String str = "hello";
    	public Hello(String s){
    		System.out.println("s = " + s);
    		System.out.println("1 -> this.s = " + this.str);
    		// 当在一个类中明确指出使用对象自己的变量或函数时需加上this的引用
    		this.str = s;
    		System.out.println("2 -> this.s = " + this.str);
    	}
    }
    
    public class test1{
    	
    	public static void main(String[] args) {
    
    		Hello h = new Hello("word");
    		
    		
    	}
    
    }

    运行结果为:

    s = word
    1 -> this.s = hello
    2 -> this.s = word


     2、形参与成员名字重名,用this来区分

    class Hello1{
    	String name = "hello";
    	public void setName(String name){
    		this.name = name;
    	}
    	
    	public String getName(){
    		return this.name;
    	}
    }
    
    
    public class test2 {
    
    	public static void main(String[] args) {
    
    		Hello1 h = new Hello1();
    		
    		h.setName("word");
    		System.out.println(h.getName());	
    	}
    }


    运行结果为:

    word

    3、引用构造函数

    这个和super放在一起讲

    super

    super可以理解为指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

    super也有三种用法

    1、普通的直接引用

    与this相似,super相当于是指向当前对象的父类,这样就可以用super.xxx来引用父类的成员

    class Animal{
    	private String member1 = "member1";
    	protected String member2 = "member2";
    	public String member3 = "member3";
    	String member4 = "member4";
    	
    	public Animal(){
    		
    	}
    }
    
    class Cat extends Animal{
    	public Cat(){
    		// System.out.println(super.member1); 不能访问标为private的成员
    		System.out.println(super.member2);
    		System.out.println(super.member3);
    		System.out.println(super.member4);//如果子类与父类在同一包内,可以访问默认(无修饰符)的成员变量与方法。
    	}
    }
    
    public class test3 {
    	public static void main(String[] args) {
    		Cat c = new Cat();
    	}
    }


    
    

    
    

    运行结果为:

    member2member3member4

    2、子类中的成员变量或方法与父类中的成员变量或方法重名

    class Animal{
    	
    	String name = "animals";
    	void value(){
    		name = "Animal";
    	}
    }
    
    class Dog extends Animal{
    	
    	String name;
    	void value(){
    		name = "Dog";
    		super.value();
    		System.out.println(name);
    		System.out.println(super.name);
    	}
    	
    }
    public class test4 {
    	public static void main(String[] args) {
    		Dog d = new Dog();
    		d.value();
    	}
    }

    运行结果:

    Dog

    Animal

    可以看到,这里既调用了父类的方法,也调用了子类的变量。若不调用父类方法value(),只调用父类变量name的话,则父类的name值为animals


    3、引用构造函数

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

    this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)

    /**
     * super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函数的第一行
     * 调用父类的方法
     */
    class Animal{
    	public Animal(){
    		System.out.println("父类无参构造函数:An animal");
    	}
    
    	public Animal(String name){
    		System.out.println("父类有参构造函数:"+name);
    	}
    
    	void getName(String name){
    		System.out.println("父类:this is " + name);
    	}
    }
    class Dog extends Animal{
    
    	public Dog(){
    		// super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函数的第一行
    		// 如果子类构造函数中没有写super()函数,编译器会自动帮我们添加一个无参数的super()
    		
    		// 1、2、3、4只能选其一,且必须在构造函数第一行
    		super();//1:调用父类无参构造函数
    //		super("animals");//2:调用父类相应有参构造函数
    //		
    //		this();//3:调用子类本身的无参构造函数
    //		this("animals");//4:调用子类本身相应的有参构造函数
    		
    		//super.getName("animals");//调用父类的方法
    		this.getName("animals");//若子类重写了此方法则调用子类本身的方法,若子类未重写,则调用父类的方法
    		System.out.println("A Dog");
    	}
    	
    	void getName(String name){
    		System.out.println("子类:this is " + name);
    	}
    }
    
    public class Main {
    	
    	public static void main(String[] args) {
    		Dog dog = new Dog();
    	}
    
    }

    输出结果为

    父类无参构造函数:An animal
    子类:this is animals
    A Dog


    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基础11(继承中关键字super和this)

    千次阅读 2021-11-15 20:56:19
    在了解完毕构造器之后,我们就知道关键字super和this的作用了
  • java super this 关键字的区分使用

    千次阅读 多人点赞 2018-10-10 16:07:46
    java super this 关键字的区分使用 在java类中使用super来调用父类中的指定操作: super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super可用于在子类构造方法中调用父类的构造器 ...
  • java继承和super和this

    千次阅读 2021-09-11 10:47:01
    调用本类的无参构造方法/含参构造方法 super和this this:本类对象的引用 super:本类对象的父引用 //this,super 不是真实存在的对象 //当有对象调用对应的含有this,super关键字的方法时,this和super才指向具体的对象 ...
  • this和super

    千次阅读 多人点赞 2021-01-28 00:31:25
    一、this 概念:this代表着当前对象的引用,所谓的当前对象,就是正在调用对象的属性和方法的那个对象 ...this和static的关系 static方法是类方法,先于任何实例(对象)存在,static在类加载时就已经存在了,但对象是在
  • Java super和this的异同总结

    千次阅读 2016-01-02 10:56:01
    super和this的异同  1)super(参数列表):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)   this(参数列表):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)  2)super: 它...
  • super this 的区别

    千次阅读 2019-03-02 17:50:04
    super和this的异同: super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) super: 它引用当前对象的直接...
  • package com.cj.study.thissuper; public class Student{ public String name; public void setName(String name) { this.name = name; } public String getName() { return name; } } ...
  • JAVA中super和this调用构造函数

    千次阅读 2015-09-11 16:20:54
    this 和super只能在构造函数中有有一个,且都必须是构造函数当中的第一行。 super关键字,子类可以通过它调用父类的构造函数。 1、当父类的构造函数是无参构造函数时,在子类的构造函数中,就算不写super()去调用...
  • 继承中的super和 this

    千次阅读 2022-01-24 18:14:32
    3.super和this不能同时调用构造方法! vs ​ this: 代表的对象不同: this:代表本身调用者这个对象 super:代表父类对象的引用 前提: this:没有继承也可以使用 super:只能在继承条件下使用...
  • this和super的区别

    千次阅读 2020-08-17 22:40:46
    一、this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 this的用法在java中大体可以分为3种: 1、普通的直接引用 this相当于是指向当前对象本身。 2、形参与成员名字重名,用this来...
  • this和super的区别和各自的作用?

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

    千次阅读 2022-04-04 13:36:44
    · 形参成员名重名,用this来区分super:父类对象 super可以理解为是指向自己超(父)类对象,这个超类指的是离自己最近的一个父类。也大致分为3中中用法 1、普通的直接引用,与this类似,...
  • this和super的区别和作用

    千次阅读 2018-12-06 07:45:00
    this和super this:代表对象(代表本类类型对象的引用)。就是所在方法所属对象的引用。哪个对象调用了this所在的方法,this就代表哪个对象,就是哪个对象的引用。 this还可以用于构造方法间的调用。 调用格式:...
  • 关键字this和super的区别

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

    千次阅读 2020-03-31 10:26:59
    this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this相当于是指向当前对象本身。 2.形参与成员名字重名,...
  • Java的继承(extend),super和this

    千次阅读 2020-02-29 16:00:47
    一、继承:子类获得父类中所有非私有的变量方法 就像一个儿子继承了父亲 那么父亲有的东西儿子也有 注:只支持单继承 不允许多重继承 一个类只能有一个直接父类 多个类可以继承一个父类 可以多重继承 继承的关键字...
  • superthis的区别总结

    千次阅读 2020-12-27 20:39:00
    3、super和this不能同时调用构造方法 super vs this区别: 1、代表的对象不同;this:本身调用这个对象;super:代表父类对象的应用 2、前提不同;this:没有继承也可以使用;super:只能在继承条件下才可以使用 ...
  • 基础不扎实的朋友应该会有一个疑问,当super和this都可以用的时候,到底我们是用super调用父类方法还是用this呢?这里其实是分两种情况的:当子类重写了父类的方法时,如果需要用到父类的方法时,才要用super,表明...
  • 【java】this()与super()使用详解

    万次阅读 多人点赞 2018-01-10 16:36:20
    this调用属性、调用方法、利用this表示当前对象。 this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就...
  • java中this和super的用法区别

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

    千次阅读 2021-02-26 08:22:19
    一、this和super关键字区别this表示当前对象:this.属性 区别成员变量和局部变量this.() 调用本类的某个方法this() 表示调用本类构造方法,只能用在构造方法的第一行语句。this关键字只能出现在非static修饰的代码中...
  • 继承/理解 super和this关键字

    千次阅读 2022-02-09 10:25:51
    this 意义:当局部变量成员变量发生冲突,用this区分 调用构造方法,this(),this(参数) 调用成员变量,this.对象属性名 调用成员方法,this.对象方法名 区分 super是当前对象的父对象的引用,本质上是一个...
  • 使用this和super可以访问实例成员和类成员(虽然通过this和super可以访问类成员,但不建议使用) 因此this和super都不能出现在static方法中和static代码块中(类初始化器) this和super都可以用于调用构造方法 当...
  • 浅谈this和super()

    千次阅读 2018-10-20 17:30:43
    一直对this和super()关键字在使用方面和理解方面都不太清楚,根据以往经验和各种资料总结出以下内容: java代码中要对象实列化时,至少有一条从本类出发到Object的通道,而这条通道的开辟者主要就是this和super,...
  • this和super的使用其实很简单,不过有些猿们啊,查看了很多资料后,还是不得要领。 好吧,那我就在众望下整理出秘籍,供猿们修练~~~ 此乃家居出行面试互侃必备啊 this this 表示当前对象 使用上细分的话,...
  • super和this两者都属于构造器的部分   一、使用方法:  this: 1、this.属性 2、this.方法 3、this(参数)  注意----》(1)属性或者方法不能是静态的,因静态的方法或属性不属于类的实例!  (2)属性只能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,298,697
精华内容 519,478
关键字:

super和this

友情链接: 20181031.rar