发布时间:2022-11-15 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印

this关键字

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

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

创建对象分为四步:

因为在调用构造方法前,对象已被创建,所以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和super关键字
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;
    }
}

总结:

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是直接从其父类开始查找属性/方法