super和this关键字的理解

super和this都是引用,指向同一个内存地址,不一样的是对这两个东西的解释,这要从类的内存布局说起。
一个class,如果继承于其他类,那么前面的内存部分是父类的东西,后面部分才是自己的,当你访问父类,只要能把this转成父类引用,编译器根本不会意识到目前在操作的是子类,super = (father)this。 upcast.
为了RTTI,需要downcast,编译器会对这两个类作内部作一些处理,使他们能表现正确的行为,比如多重继承,虚拟继承等,先忽略这些,父类和子类就是一个简单的内存空间堆叠关系,并没有真正“产生”一个父类。

å¨è¿éæå¥å¾çæè¿°

class Super {
}
 
class SubClass extends Super{
    public void foo() {
        System.out.println(this.getClass());
        System.out.println(super.getClass());
    }
}

在这段代码里,
this就是class SubClass这个类(的对象的引用)
super就是class Super这个类(的对象的引用)


System.out.println(this.getClass());
System.out.println(super.getClass());
的执行结果完全看用哪个对象在调用getClass()这个方法

比如实例化了一个SubClass的对象sub
sub.foo();
那this.getClass()的结果完全能理解
应该是sub这个对象对应的类——SubClass

那super.getClass()的结果呢?
一般的想法可能是这样——Super
但是这是不对的,
因为这里仅仅是在sub这个对象里调用了父类中的getClass()这个方法
而这个方法的意义是返回当前对象对应的类
所以super.getClass()的结果
应该是sub这个对象(当前对象)对应的类——SubClass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值