首页 > 其他分享 >this和super

this和super

时间:2023-02-12 23:24:12浏览次数:26  
标签:String age Student Integer super public name

this

1.获取当前对象的引用 --- 内存地址

public class Student {
   public Student B(){
       return this;
  }


   public static void main(String[] args) {
       Student s = new Student();
       System.out.println(s.B());
  }
}
com.bw.aa.thread.iterator1@4d405ef7

2.成员方法中调用

当形参和成员变量重名时,我们优先使用形参,所以我们要加this来区分

public class Student {
    
    Integer num;
    
    public int a(Integer age){
        return  num;
    }
}
​
​
public class Test1 extends Student{
    public  Integer age;
    public  String name;
    public test1(Integer age,String name){
          this.age = age;
          this.name = name;
    }
   /**
    形参和成员变量不同名时,我们可以不用加this区分
    public Test1(Integer a,String n){
          age = a;
          name = n;
    }  
    a = 1  name = haha
    
   形参和成员变量同名时,不加this,就表示形参赋值给形参,没有任何意义,返回为null
   public Test1(Integer age,String name){
          this.age = age;
          this.name = name;
    }  
    a = null  name = null
   */
    
   //重写的Student方法
   @Override
   public  int a(Integer a){
       //访问本类中的属性,如果本类中没有,就从父类中继续查询
        this.num = a;
        System.out.println(a);
        return a;
    }
​
    public static void main(String[] args) {
        Test1 test1 = new Test1(1,"haha");
        test1.a(2);
        System.out.println(test1);
    }
}
​
2
a = 1  name = haha

3.方法内部调用 -- 不必加this

public class Student {
    String name;
    Integer a;
    
    public int a(Integer A){
        B();
        return  A;
    }
​
    public Student B(){
        return this;
    }
 }

4.构造器中调用 ---- 只能调用一个,且必须在首行

public class Student {
    String name;
    Integer age;
   
    Student(){
        System.out.println("1111111");
    }
  
    Student(String a){
        this(1,"b");
        System.out.println("2");
    }
  
    Student(Integer b,String a){
        this();
        //必须在第一位 ,所以只能调用一个
        //this("a");
        System.out.println("3");
    }
​
    public static void main(String[] args) {
        Student S = new Student("2");
        System.out.println(S);
    }
}
1111111
3
2
com.bw.aa.thread.iterator1@4d405ef7

5.static修饰的方法无法调用this关键字

public class Student {
    String name;
    Integer school;
    //this关键字指代当前对象,而静态方法是通过类调用的方法,不需要new来实例化对象,都不用实例化,自然就
    //没有当前对象了。因此,this关键字无法在static方法中使用就解释得通了。
  /**  
        public static  student B(){
            return this;
        }
        public static void setSchool(String school) {
            this.school = school;
        }
    */
}

super

当我重写一个方法时,我可以在完全覆盖父类的逻辑,但我只想在父类的基础上扩展一点自己的逻辑,我们就可以用super来调用父类的方法,从而复用父类的逻辑

1.访问成员变量

public class Student {
    String name;
    Integer a = 11111;
}
public class Test1 extends Student{
    public  Integer age;
    public  String name;
​
    public test1(Integer age,String name){
          this.age = super.a;
          this.name = name;
    }
    
    public static void main(String[] args) {
        Test1 test1 = new Test1(1,"sds");
        System.out.println(test1);
    }
}
a = 11111  name = sds

2.访问构造器

子类在构造时必须先得完成父类的构造,也就是说在所有的构造方法中第一行的逻辑必须是调用父类的构造方法,平常没有通过super调用构造器,是因为编译器会在默认第一行加上父类的无参构造方法。

public class Student {
    String name;
    Integer a;
    student(Integer age,String name){ }
    
}
public class Test1 extends Student{
    
     //父类只有有参构造器没有无参构造器,我们就必须用super来手动调用父类构造器。
    public test1(){
        //编译失败,因为父类没有无参构造方法
    }
    public test1(String name){
        //编译成功,因为this(age,name)指定了父类构造器
          this(18,"aaaaa");
    }
    public test1(Integer age,String name){
        //编译成功,因为指定了父类构造器
          super(age,name);
    }
}

3.访问成员方法

public class Student {
    public int setA(Integer a) {
        System.out.println(a);
        return  a;
    }
}
public class Test1 extends Student{
    public  Integer age;
    public  String name;
​
    public test1(){
          super.setA(11);
          
    }
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        System.out.println(test1);
    }
}

 

标签:String,age,Student,Integer,super,public,name
From: https://www.cnblogs.com/zhuyilong/p/17114969.html

相关文章

  • this与super的使用
    this关键字与super关键字的使用说明Author:MsuenbDate:2023-02-10关键字-thisthis是一个引用当前对象的变量,它的作用和其词义接近。this可以调用类的属性、方法(pr......
  • HITCON CTF 2022 SuperPrime
    继续复现HITCONCTF的赛题。争取近期全部复现完。源码chall.pyfromCrypto.Util.numberimportgetPrime,isPrime,bytes_to_longdefgetSuperPrime(nbits):......
  • supervisor 安装和基本使用
    安装yuminstallsupervisortouch/var/run/supervisor/supervisor.sockchmod777/var/run/supervisor/supervisor.socksupervisordsupervisorctlstartallsuper......
  • super
    super注意点:super调用父类的构造方法,必须在构造方法的第一个!super必须只能出现在子类的方法或者构造方法中!super和this不能同时调用构造方法!Vsthis代表......
  • unix:///var/run/supervisor.sock no such file报错解决办法
    报错unix:///var/run/supervisor.socknosuchfile原因/var/run/supervisor.sock已被清理。解决办法关闭supervisor:pkillsupervisor启动supervisor:supervisord-......
  • 【Docker】部署Superset
    在互联网开发方面“数据可视化”是永恒的话题。自己开发成本太高,使用市场成熟的BI工具又太贵(大公司就无所谓,小企业毕竟不想花这个钱)。我们公司其实也面临这种情况,在经过长期......
  • 10 super 讲解
    super讲解packagecom.zhan.base05Oop;publicclassTest10{//区别有无this.//区别this.(指向当前类或者当前对象的属性和方法)和super.(指向父......
  • linux物理机器挂载硬盘报错,can't read superblock
    场景:某宝买了个1T机械硬盘,做逻辑卷挂载时,报错误can'treadsuperblock,网上搜索过一大堆修复的问题,怎么搞都不行。自己买条黑线ATA3.0的换上即可......
  • ? super V, ? extends T
    ? super V, ? extends T 这种写法是啥意思  答:? super V就是表示传入的参数的类型必须是V的超类? extends T就表示传入的参数的类型必须继承了T 这种......
  • javaScript 高级语法 - class创建对象,继承 extends,super,类中this指向问题
    1.class创建对象classHuman{//类constructor(id,name){//构造器this.id=id;//成员变量this.name=name;}info(){//方法console.log("inf......