首页 > 其他分享 >this和super关键字

this和super关键字

时间:2022-11-15 10:02:19浏览次数:41  
标签:调用 构造方法 int 关键字 父类 super public

this关键字

this的本质就是:创建好的对象的地址 -> 代表当前对象

构造方法是创建java对象的重要途经,通过new关键字调用构造器时,构造器返回该类对象,但是该对象并不完全由构造器创建

创建对象分为四步:

  • 分配对象空间,将对象成员变量初始化为0或null;
  • 执行属性值显式初始化;
  • 执行构造方法;
  • 返回对象地址给相关变量

因为在调用构造方法前,对象已被创建,所以this可以在构造方法中充当当前对象

public construct(int id, String name){
	this.id = id;
	this.name = name;
}

举个例子,分析一下创建对象的过程

class Person {
    int age;
    String sex;
    public Person(int age, String sex) {
        this.age = age;
        this.sex = sex;
    }
}

public class Demo {

    public static void main(String[] args) {
        Person person = new Person(22 ,"boy");
    }
}

在这里插入图片描述
this可以调用重载的构造方法

class Person {
    int age;
    String sex;
    String name;
    public Person(int age, String sex) {
        this.age = age;
        this.sex = sex;
    }

    public Person(int age,String sex,String name){
        this(age,sex);   //this()访问其他构造方法
        this.name = name;
    }
}

总结:

  • this可以用于构造方法中代表当前对象;
  • this也可以调用重载的构造方法,但是必须位于构造方法第一句
  • this不能用与static方法中

super关键字

  • 访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。应该注意到,子类一定会调用父类的构造函数来完成初始化工作,默认调用父类的无参构造函数,如果子类需要调用父类其它构造函数,那么就可以使用 super() 函数,但是必须位于构造方法第一句。(所以在构造器中this和super不能共存,只能用一个)

  • 访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。

public class SuperDemo {

    protected int x;
    protected int y;
    public SuperDemo(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public void func() {
        System.out.println("调用父类方法");
    }
}

public class SuperExtend extends SuperDemo {
    private int z;
    public SuperExtend(int x, int y, int z) {
        super(x, y);  //super()访问父类构造方法
        this.z = z;
    }

    @Override
    public void func() {
        super.func();   //super引用父类方法实现
        System.out.println("调用子类方法");
    }
}
运行结果:
	调用父类方法
	调用子类方法

两者区别

this super
访问属性 从本类属性开始访问,本类有并且可以访问则访问;没有从父类中查找,父类有并且可以访问则访问;如果父类没有则继续向上找直到Object类 直接从父类中开始查找,直到Object类
调用方法 调用本类方法,本类如果没有此方法或则不能访问,则从父类中调用,以此类推,直到Object类 直接调用父类方法,直到Object类

总而言之,this是先从本类开始查找属性/方法,super是直接从其父类开始查找属性/方法

标签:调用,构造方法,int,关键字,父类,super,public
From: https://www.cnblogs.com/ivanchenyx/p/16891431.html

相关文章

  • 抽象类、abstract关键字
    目录abstract关键字抽象类的匿名子类抽象类的应用:模板方法的设计模式abstract关键字abstract:抽象的abstract可以用来修饰的结构:类、方法abstract修饰类:抽象类此类......
  • 接口、interface关键字
    目录interface关键字接口的匿名实现类的对象接口的应用:代理模式JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法面试题:抽象类与接口有哪些异同?interface......
  • 代码块、final关键字
    目录代码块final关键字代码块代码块的作用:用来初始化类、对象代码块如果有修饰的话,只能使用static分类:静态代码块vs非静态代码块静态代码块: 内部可以有输......
  • static关键字
    static关键字static:静态的static可以用来修饰:属性、方法、代码块、内部类使用static修饰属性:静态变量(或类变量)属性,按是否使用static修饰,又分为:静态属性vs非静态属......
  • 多态性、instanceof关键字
    目录多态性向下转型instanceof关键字多态性理解多态性:可以理解为一个事物的多种形态。何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)多......
  • 重写、super关键字
    目录重写super关键字重写重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,......
  • C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)
    命名空间概述在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的......
  • supervisor管理java进程
    安装yuminstallsupervisor设置开机启动systemctlenablesupervisord启动supervisordsystemctlstartsupervisord配置java进程[program:monitorapi]command=......
  • C++ explicit关键字详解
    C++编码时,可以通过构造函数将相应的数据类型转换成为C++类的对象,从某种程度来说给编码带来了方便,但并不是每次都正确,为了避免这种情况,C++提供了explicit关键字,相对于implic......
  • 关于一个构造方法中this()和super()的执行顺序?
    1.通过this()调用其它构造方法,必须位于本构造方法的第一句2.构造方法中如果第一行没有显示调用super();,那么Java都会隐式调用super();,作为父类的初始化方法那这两个......