首页 > 试题广场 >

下列选项中关于Java中super关键字的说法正确的是什么?

[单选题]
下列选项中关于Java中super关键字的说法正确的是()
  • super关键字是在子类对象内部指代其父类对象的引用
  • super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类
  • 子类通过super关键字只能调用父类的方法,而不能调用父类的属性
  • 子类通过super关键字只能调用父类的属性,而不能调用父类的方法
推荐
A
super是java提供的一个关键字,super用于限定该对象调用它从父类继承得到的Field或方法。super关键字不能出现在static修饰的方法中,因为static修饰的方法是属于类的。如果在构造器中使用super,则super用于限定该构造器初始化的是该对象从父类继承得到的field,而不是该类自己定义的field。需要注意的是,super关键字只能指代直接父类,不能指代父类的父类。
编辑于 2015-02-02 11:14:24 回复(1)
更多回答
答案:AB
super出现在继承了父类的子类中。有三种存在方式:
第一种:super.xxx;(xxx为变量名或对象名)
这种方法意义为,获取父类中的名字为xxx的变量或方法引用。
使用这种方法可以直接访问父类中的变量或对象,进行修改赋值等操作
第二种:super.xxx();(xxx为方法名)
这种方法意义为,直接访问并调用父类中的方法。
第三种:super();
这种方法意义为,调用父类的初始化方法,其实就是调用父类中的public xxx()方法

此外,super只能指代其直接父类,在父类中调用super能指代父类的父类。
发表于 2015-01-28 19:45:54 回复(3)
这道题,第一个选项: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),所以该选项描述不严谨,也是错误的。
第三个选项和第四个选项错的太明显了。

所以这道选择题根本没有正确答案,我觉得作为面试者不要觉得说大公司就不会出错题目,也会存在题目
不严谨的可能性,这和出题人本身的知识认知以及表达能力有关,建议在笔试中遇到这种题目就可以在空白
处写出自己的见解,再当面和面试官讨论交流,我相信有独立思考和判断能力的求职者才更受面试官认同。

发表于 2018-06-09 10:23:43 回复(6)
A.super是父类标识符,是子类对象内部指代父类对象的引用
super只可以指代子类的父类,不能指代父类的父类
可以通过super.xx来获取父类的变量(属性)
可以通过super.xx()来访问父类的方法
发表于 2015-08-16 11:47:25 回复(0)
B 怎么不对,而且A 有问题, “super不是对象的引用,只是一个指示编译器调用超类方法的特殊关键字” __《java核心技术卷1》原书第10版 p150 第五章 5.1.2节注释
发表于 2017-03-19 16:16:38 回复(4)
父类还会创建对象?逗我玩吧
发表于 2017-06-16 22:21:44 回复(0)
super关键和this作用类似,是使被屏蔽的成员变量或者成员方法变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最近的超类)。
1.在子类构造方法中调用父类的构造方法
1)说明:用super(参数列表)的方式调用,参数不是必须的。同时,还要注意super(参数列表)这条语句只能在子类构造方法中的第一行 
2.访问父类中被覆盖的同名变量或者方法

1)说明:当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类变量覆盖同名父类变量时,可以使用super.成员变量名引用父类成员变量。同时,若子类的成员方法覆盖了父类的成员方法时,也可以使用super.方法名(参数列表)的方式访问父类的方法。

发表于 2017-03-15 09:06:51 回复(0)
出题人来告诉我“父类对象”是个什么东西
发表于 2017-05-22 18:53:59 回复(0)
Java核心技术 卷1(原书第九版)152页:super不是一个对象的引用。
发表于 2019-06-09 10:28:23 回复(0)
3、4选项,super可以调用直接父类的非私有属性和非私有方法。
发表于 2018-12-11 09:34:51 回复(0)
super不能在static方法中,在子类中指代父类的方法和域
发表于 2018-09-23 11:12:52 回复(0)
super关键字不能出现在static修饰的方法中
发表于 2016-08-14 13:47:06 回复(0)
在子类中调用到父类的方法super.xxx(),提供一种访问被覆盖父类的一种机制
特殊变量super,提供了对父类的访问。
          可以使用super访问父类被子类隐藏的变量或覆盖的方法。
          每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
          构造是不能被继承的。


发表于 2015-05-05 14:49:25 回复(0)
A
子类使用super可引用父类的某些方法和属性。
发表于 2015-04-23 14:48:47 回复(0)
A
子类不能跨越父类引用祖父。
子类使用super可引用父类的某些方法和属性。
发表于 2015-01-26 15:32:52 回复(0)
 AC
发表于 2015-01-11 10:12:14 回复(0)