首页 > 其他分享 >Day20.1:关于this、super的解析

Day20.1:关于this、super的解析

时间:2022-11-23 21:36:21浏览次数:53  
标签:解析 name Students 构造 Day20.1 父类 super public

this、super详解

当我们在外部程序调用一个类的方法,如果这个类的方法与其父类的方法重载,我们需要用thissuper进行区分

this在Java中是一个复杂的关键字,this的使用形式体现了其灵活性,可以实现三种结构形式的描述:

  1. 当前类中的属性:this.属性; super.属性

  2. 当前类中的方法(构造方法、普通方法):

  • 普通方法:this.方法名(); super.方法名();

  • 构造方法:this(); super(); —————————————因为构造方法的方法名与类名一致所以直接省去;

  1. 描述当前对象;

第一种this.属性; super.属性;

在普通方法中:当形参与成员名字相同时,用this.属性; super.属性;加以区分

我们先来看第一种结构形式的案例:

public class Person{
    String name="工地佬";
}
public class Students{
    private name="工地牛马";
    public void test(String name){
        System.out.println(name);//此时这个name表示的是当前参数的name;
        System.out.println(this.name);//this.name表示当前类的属性,this代表的是Students实例化后的对象
        System.out.printlb(super.name);//super.name表示来自的父类的属性;
    }
}
public class Application{
    public static void main(String[] args){
        Students stu=new Students;//Students类实例化时,父类的构造器也会被调用
        stu.test("超级牛马");
    }
}

第二种thissuper结构形式:

this.方法名();——调用本类的方法

super.方法名();——调用父类的方法

//输出结果
超级牛马
工地牛马
工地佬
public class Person{
    String name="工地佬";
    public void print(){
        System.out.println("父类的方法输出了")
}
}
public class Students extends Person{
    private name="工地牛马";
    public void print(){
        System.out.println("子类的方法输出了")
    }
    public void test1(){
        print();//调用本类的print方法
        this.ptint();//调用本类的print方法
        super.print();//调用从父类继承过来的的print方法
        
        //有人可能疑问,为什么可以直接调用上面的print方法;
        //首先两个都是非静态方法,其次Students是Person的子类,Person的方法会被继承,最后非静态的方法可以相互调用!
    }
}
public class Application{
    public static void main(String[] args){
        Students stu=new Students();
        stu.print();
    }
}
//输出结果
子类的方法输出了
子类的方法输出了
父类的方法输出了

在构造方法中this();是调用自身的构造方法

public class Students{
   String name;
   int age;
   public Students(){
   this.name="工地佬";
}
   public Students(int age){
     this();//此时则是在调用自身的构造器
     this.age=age;
   }
}

构造方法中的super(); 调用父类的构造器

public class Person{
    public Person{
        
    }
}
//Students是Person的子类
public class Students extends Person{
    //当父类是无参构造器时,子类可定义有参或无参构造方法
    public Students{
        //此处隐藏一个父类构造器:super();
    }
    public Students(String name){
        //此处隐藏一个父类构造器:super();
    }
}
public class Person{
    public Person(String name){
        
    }
}
//Students是Person的子类
public class Students extends Person{
    //当父类是有参构造器时,子类构造器中那个默认的父类构造器一定要显示的定义为有参构造;
    //因为子类构造器中含有隐藏的、默认的父类无参构造器;
    //如果我们不显示的定义父类有参构造器;当子类实例化时,默认的无参父类构造器无法运行,因为父类是有参构造器,构造器不一致,无法构造
    //所以我们在定义一个有参构造器的时候,一定要将无参构造器显示的定义出来
    public Students{
        //此处隐藏一个无参父类构造器:super();如果不加以修改,无参和有参发生冲突,父类构造器无法调用
        super(String name);//也就是说子类中调用的父类构造器要与父类中的构造器相符
    }
    public Students(String name){
        //此处隐藏一个无参父类构造器:super();如果不加以修改,无参和有参发生冲突,父类构造器无法调用
        super(String name);
    }
}

总结:

  • super(参数);是在调用父类的构造器;this(参数);是在调用本类的构造器

  • super的结构形式只能出现在子类或者构造器中;

  • super调用父类方法时在构造器中的必须在代码的第一行;

  • super和this调用构造器时不能同时出现;因为this();会调用本类其他构造器,必然含有super();

  • this代表的是调用者本身这个对象,是指向对象的一个指针;

  • super可以理解为是指向自己父类对象的一个指针;

标签:解析,name,Students,构造,Day20.1,父类,super,public
From: https://www.cnblogs.com/CQliuwei/p/16920172.html

相关文章

  • Karmada跨集群优雅故障迁移特性解析
    摘要:在Karmada最新版本v1.3中,跨集群故障迁移特性支持优雅故障迁移,确保迁移过程足够平滑。本文分享自华为云社区《​​Karmada跨集群优雅故障迁移特性解析​​》,作者:Karma......
  • JVM运行数据区深度解析
    运行数据区字节码只是一个二进制文件存放在那里。要想在jvm里跑起来,先得有个运行的内存环境。也就是我们所说的jvm运行时数据区。1)运行时数据区的位置运行时数据区是jvm......
  • JMeter阶梯式加压测试插件-Stepping Thread Group解析
    在日常性能测试过程中,有时需要对被测对象不断的增加压力,直至达到某个值后,并持续运行一段时间。这里将借助jmeterSteppingThreadGroup插件模拟这种情况。本文介绍在......
  • JVM运行数据区深度解析
    运行数据区字节码只是一个二进制文件存放在那里。要想在jvm里跑起来,先得有个运行的内存环境。也就是我们所说的jvm运行时数据区。1)运行时数据区的位置运行时数据区是jv......
  • 申请免费证书、域名解析以及nginx部署配置https为微信小程序服务
    申请免费证书、域名解析以及nginx部署配置https为微信小程序服务 时间:2022.11.23 作者:飞快的蜗牛  关键字:申请免费证书、域名解析、nginx配置部署https......
  • K8s hosts 解析 HostAliases
    先来通过下图来表达一下现象:通过图片内容可以看出,在k8s中,容器内部的hosts解析是不会继承宿主机的host解析的(与宿主机不相干),常规情况我们在这个应用体系内都有公共的......
  • SAP ABAP CDS view里的注解在ABAP后台是如何被解析的?
    我们在ABAPDevelopmentTool里编写SAPCDSview,为视图维护这些以@开头的注解,同JavaSpring里广泛应用的annotation一样,都是一种为developmentobject维护元数据的方式。......
  • 1、ArrayList源码解析
    目录1概述2底层数据结构3构造函数4自动扩容5set()get()remove()6Fail-Fast机制1概述ArrayList实现了List接口,是顺序容器,允许放入null元素有一个容量(capacit......
  • 深度解析KubeEdge EdgeMesh 高可用架构
    摘要:通过高可用特性应用场景、高可用特性使用手册、课题总结、未来展望等四个部分的内容来向大家介绍新版本EdgeMesh的高可用架构。本文分享自华为云社区《KubeEdgeEdgeM......
  • Full Activation V1.36 V1.35 Orange5 Orange 5 Super Pro Professional Programming
    Orange5SuperPro,Orange5superproprogrammer Orange5superproprogrammerisaprofessionalprogrammingdeviceformemoryandmicrocontrollers.Unique......