this和super

简而言之,this是指向当前对象的引用,而super是指向当前对象父类的引用!


一、this指针
      this指针总结起来有如下两点:
1、当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
2、Java关键字this只能用于方法方法体内。
    举例说明:

public class Base {
    int id;
    public Base() {
        this(0); // 在一个构造函数中调用另一个构造函数
    }
    public Base(int id) {
        this.id = id; // 区分和类属性重名的变量
    }
    public Object Base() {
        return this; // 返回自身的引用
    }
    public void pri() {
        System.out.println(“Base”); // 返回自身的引用
    }
}

由上一个例子可以看出,this指针可以使用到的三个地方:
    1、 在一个构造函数中调用另一个构造函数;
    2、区分和类属性重名的变量;
    3、获得对象自身的引用;

this指针在方法调用时的用处
    假如一个Dog类具有bite(Person p)的方法,
    Dog a = new Dog();
    Dog b = new Dog();
    a.bite(p1);
    b.bite(p2);

bite方法对于Dog类来说是唯一的,那么如何区分是那个对象调用的bite方法呢?
    其实对于编译器来说会把a.bite(p1)转化为bite(a, p1),把b.bite(p2)转化为bite(b, p2),那么分别接受对象a和对象b的就是this指针,通过this指针来区分不同的内存块。

二、super指针

    super关键字的作用是在子类中被屏蔽的直接父类的方法和属性;
举例说明:

public class Inherit extends Base{
    int id;
    public Inherit(int id) {
        super(1); // 调用父类的构造方法
        this.id = 2;
    }
    public void pri() {
        System.out.println(super.id+” “+id); // 调用被屏蔽的父类属性
        super.pri(); // 调用被屏蔽的父类方法
        System.out.println(“Inherit”);
    }
    public static void main(String[] args) {
        Inherit in = new Inherit(2);
        in.pri();
    }
}

由上例可以看出,super指针的使用也是主要有三点:
    1、在构造函数中调用父类的构造方法;
    2、访问被屏蔽的父类属性;
    3、访问被屏蔽的父类方法;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值