❤️作者主页:小虚竹
❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,阿里云专家博主🏆
问题
问题1:super的含义是父类的引用吗?
问题2:下面Test 的main方法执行后,打印的内容是什么?
问题3:C类中的super,是指C,还是B,或是A?
public abstract class A {
}
public abstract class B extends A {
}
public class C extends B {
@Override
public String toString() {
return super.toString();
}
}
public class Test {
public static void main(String[] args) {
C c = new C();
System.out.println(c.toString());
}
}
解决方案
只要懂得super的底层原理,上面这三个问题的答案就出来了。
super的含义:指向当前对象的父类型特征;
super代表继承关系,通过它能访问到 已经继承 到子类中的属于父类的属性和方法。
像这题如果父类没有重写toString方法,会再往上找,直到找到为止(最终类的是Object类)。
问题2的答案: 打印的是C的内存地址。
问题3的答案: 这题是个陷阱题,不是A,B,C。而是指向当前对象的父类型特征;
扩展
- this和super一样,都是对象内部的引用变量,只能出现在对象内部;
- super能出现在实例方法和构造方法中。
- super不能出现在静态方法中。
- super()都只能出现在构造方法的第一行