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

580

被折叠的 条评论
为什么被折叠?



