super关键字与this对象引用

本文探讨了Java中的继承、super关键字以及多态的概念。强调super用于访问父类的非private成员,而this则指代当前对象。在构造器中使用this()或super()调用其他构造器。重写并不意味着覆盖,而是隐藏。多态允许父类引用指向子类对象,实现动态绑定。
  1. 子类调用super.getClass();this.getClass();结果是一样的,都是子类对象。因为Object类的getClass()方法返回的是该对象的运行时类,一个对象的运行时类是该对象通过new创建时指定的类。只有重写过getClass方法才会有区别.
  2. super是访问父类成员的一个桥梁,不是对象的引用。而this表达的是当前类对象的引用,Object o = super;是错误的。
super关键字
  1. 子类覆盖了父类的某个成员变量后,super就用来访问父类非private的成员变量和成员方法。(子类会继承父类的所有非private的成员变量和成员方法)
  2. 如果未覆盖父类变量和方法,则super.this.访问结果都是一样的。 this.大部分情况, 用来区分同名成员变量(方法)和局部变量(方法)的,如果没有重复,则可忽略不写。( 很多源码里面都是不写this的, 不同于 js 调用方法必写 )
  3. 在构造器中调用其他构造器或父类构造器,必须写在首行(this()super()等)。
最后

重写只是将父类的成员变量成员方法隐藏,并不是覆盖.

如果一个成员变量成员方法被重写了,可以通过super.xxx或super.xxx()来调用父类的方法.

在已经重写的情况下super.athis.a访问的是不一样的, 是两个变量.

  1. super.a 访问的是父类对象的成员变量, 如果有初始化值, 则返回父类对象初始化的值.
  2. this.a 访问的是子类对象的成员变量.
  3. 静态属性、静态方法和非静态的属性都可以被继承和隐藏(子类重名后),而不能被重写,不能实现父类的引用可以指向不同子类的对象,因此不能实现多态。
  4. 非静态方法可以被继承和重写,因此可以实现多态。
  5. 子类继承父类的一切,不能访问只是因为被隐藏,包括private。
  6. 多态是指父类的引用指向不同的子类对象
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值