首页 > 试题广场 >

不考虑反射机制,一个子类显式调用父类的构造器必须用super

[单选题]

不考虑反射机制,一个子类显式调用父类的构造器必须用super关键字。(  )



  • 正确
  • 错误
我选的是错误,利用反射的话不行吗??

发表于 2017-05-23 21:00:38 回复(4)
应该是正确的,题目中说的是子类显示调用父类中的构造方法必须使用super关键字;如果子类没有显示调用父类中的构造方法,则系统默认会调用父类中的无参构造方法;若此时父类中没有定义无参构造方法则会报错。
发表于 2017-08-01 10:24:20 回复(2)
java中的super关键词
super用于代表子类的直接父类的特征
super可以访问:
父类的成员变量,成员方法,构造方法
使用super关键词的情况:
在子类中,存在与父类相同的属性和方法,由于访问子类中属性和方法的优先级高于父类,可以通过super关键词来访问父类中的属性和方法
在子类中,可以通过super关键词来显示的调用父类的构造方法
子类的构造方法默认调用父类的无参构造方法,当父类中不存在无参构造方法时,可以同过super来调用父类的有参构造芳法来避免编译时错误。

super是引用吗?请大家讲一下,我不是很懂。。
发表于 2017-10-01 13:31:47 回复(6)
我自己手动new不算吗??
发表于 2017-06-17 00:12:43 回复(10)

1. 不考虑反射机制,一个子类显式调用父类的构造器必须用super关键字。

注解:super

.super关键字作用

1:主要存在于子类方法中,用于指向子类对象中父类对象。

2:访问父类的属性

3:访问父类的函数

4:访问父类的构造函数

.super注意的地方

thissuper很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类。类加载完毕,创建对象,父类的构造方***被调用(默认自动无参),然后执行子类相应构造创建了一个子类对象,该子类对象还包含了一个父类对象。该父类对象在子类对象内部。this

 super只能在有对象的前提下使用,不能在静态上下文使用。

.super关键字的使用

1.子类的构造函数默认第一行会默认调用父类无参的构造函数,隐式语句super();

例子:

sonint y{

//super();隐式语句

This.y=x+y;

System.out.println(“这是子类的有参构造”);

}

2.子类显式调用父类构造函数

在子类构造函数第一行通过super关键字调用父类任何构造函数。如果显式调用父类构造函数,编译器自动添加的调用父类无参数的构造就消失。构造函数间的调用只能放在第一行,只能调用一次。super()this()不能同时存在构造函数第一行。

例子:

sonint y{

super(y);

This.y=x+y;

System.out.println(“这是子类的有参构造”);

}

.super思考

如果开发者自定义了一个类,没有显示的进行类的继承,那么该类中成员函数是否可以使用super关健健字?

可以使用,继承了Object类,Object类是所有类的父类。

class Demo7 {

         public  void print(){

                   System.out.println(super.toString());

         }       

public static  void main(String[] args){

                  new Demo7().print();

                   System.out.println();

            }

}
发表于 2018-10-10 08:33:43 回复(0)
子类中没有构造方法,自动调用父类的构造方法
发表于 2017-05-26 21:34:47 回复(7)
感觉这道题有问题,有大神讲解下吗?
发表于 2017-06-06 10:30:06 回复(4)
自己把 this()和super()搞错了,显式调用只能用super(),而this()自己调用自己的其他构造函数
发表于 2019-03-05 10:59:38 回复(0)
答案是正确的。
题目说了是显示调用的情况,那就需要在子类构造方法的第一行通过super调用父类构造方法。如果子类没有显示调用父类构造方法,jvm会自动调用父类无参构造,如果父类还没有无参构造,这时候就会报错了
发表于 2021-12-13 10:29:56 回复(0)
咬文嚼字的话难道不该是super(),而不是super吗 
发表于 2021-01-28 16:26:55 回复(0)
父类的构造器方法是隐式final的,所以子类无法继承。
发表于 2019-12-13 11:45:50 回复(0)
public class ChildClass extends  SuperClass {
    public ChildClass() {
        new SuperClass();
    }
    public static void main(String[] args) {
        new SuperClass();
    }
}

感觉使用new父类,也是可以调用父类的构造器的,所以选了:错误。
发表于 2019-11-29 19:19:46 回复(0)
class Father{

} class Son extends Father{ private Father father;
    Son(){
        father=new Father(); //编译无错

    }
}
...那这个题的。。。。
发表于 2018-08-08 15:21:27 回复(5)
其实要关注的是显式而不是调用
发表于 2017-10-05 21:17:50 回复(0)
new 父类()也算调父类的构造方法啊
发表于 2024-09-05 15:32:35 回复(0)
不要把文科的咬文嚼字那一套搬进来,程序员不稀罕玩文字游戏,屏蔽了
发表于 2023-04-02 10:43:52 回复(0)
子类常规调用父类方法,就像我们new常规类一样,没有任何区别。
题目大概是想问,在子类的构造方法中,调用父类的构造方法,那时候才需要用super,且super需要放在第一行吧。
发表于 2017-06-08 09:39:40 回复(0)
序列化,反序列化?
发表于 2024-07-23 13:41:12 回复(0)
public class 子类是否显示调用父类构造器 {
    public static void main(String[] args) {
        new C();
    }
}

class B{
    public B(){
        System.out.println("调用父类构造器");
    }
}
class C extends B{
//
}结果:调用父类构造器
我觉得道题有点子毛病。既然说是显示调用,那不写super还叫个啥的显示调用??就像说人吃饭必须用嘴一样

发表于 2024-03-15 17:16:25 回复(0)
如果我直接在子类里new一个父类的对象呢?
发表于 2023-12-01 08:17:34 回复(0)