1)说明:当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类变量覆盖同名父类变量时,可以使用super.成员变量名引用父类成员变量。同时,若子类的成员方法覆盖了父类的成员方法时,也可以使用super.方法名(参数列表)的方式访问父类的方法。
这道题,第一个选项:super是对父类对象的引用,这种说法本身就是错误的,这在 《Java核心技术 卷I:基础知识》一书中的5.1小节已经说的很清楚了,下面是证明代码 public class Base { int num = 0; public int baseTest() { return 1; } } public class Sub extends Base { public void testOne() { Sub sub = this; //可以赋值成功,因为this表示当前类对象引用 System.out.println(sub.toString()); } public void testTwo() { Base base = super; //无法赋值成功,IDE提示错误,因为super根本不是父类对象引用 Object object = super; //同理,即便是赋值给Object这个顶层超类也不行 int num = super.num; //super可访问父类成员变量(不仅可以访问类成员变量,还可以访问实例成员变量) int methodResultValue = super.baseTest(); //super可访问父类成员方法(不仅可以访问类成员方法,还可以访问实例成员方法) } public static void main(String[] args) { Sub sub = new Sub(); System.out.println(sub.toString()); //输出的内容为Sub@3d4b7453 sub.testOne(); //调用该方法输出的内容为Sub@3d4b7453,再次说明this表示当前类对象引用 } } 第二个选项:子类中的super当然是指该子类的直接父类,父类中的super当然是指该父类的直接父类(如 果再没有更多的继承链,则父类的直接父类就是指Object),所以该选项描述不严谨,也是错误的。 第三个选项和第四个选项错的太明显了。 所以这道选择题根本没有正确答案,我觉得作为面试者不要觉得说大公司就不会出错题目,也会存在题目 不严谨的可能性,这和出题人本身的知识认知以及表达能力有关,建议在笔试中遇到这种题目就可以在空白 处写出自己的见解,再当面和面试官讨论交流,我相信有独立思考和判断能力的求职者才更受面试官认同。