首页 > 试题广场 >

以下程序的输出结果为

[单选题]

以下程序的输出结果为

class Base{
    public Base(String s){
        System.out.print("B");
    }
}
public class Derived extends Base{
    public Derived (String s) {
        System.out.print("D");
    }
    public static void main(String[] args){
        new Derived("C");
    }
}


  • BD
  • DB
  • C
  • 编译错误
推荐
子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可:
public Derived(String s){
		super("s");
		System.out.print("D");
	}

编辑于 2017-03-03 10:03:40 回复(10)
在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
发表于 2016-12-27 13:47:06 回复(30)
子类实例化时,其构造方***在首行隐式调用父类的空参构造方法,此题父类没有空参构造方法,因此编译不通过。如果在首行显示调用父类带参构造方法-super("str");则会通过。并得出答案~BD
发表于 2017-11-15 23:17:43 回复(0)
java初始化顺序。初始化子类必先初始化父类。子类的构造方***隐式去调用 父类无参的构造方法(不会在代码中显示)。但如果父类没有无参的构造方法,就必须在子类构造方法第一行显示调用父类的有参构造方法。否则编译失败
发表于 2017-01-17 08:11:41 回复(1)
1.写一个类,如果没有写构造函数,那么这类默认会有一个无参的构造函数。如果写构造函数了,那么就不会有默认的无参构造函数,
以自己写的构造函数为准。 2.子类在写构造函数的时候,第一行必须用super 关键字调用父类的任一构造函数。    3.用super调用父类的构造函数时,如果调用的是父类无参构造函数,则super()可以不用写,如果是有参构造函数,则必须显示调用。

所以看这道题:
1.父类 Base 有一个有参构造函数,那么默认的无参构造函数就没有了; 
2.在子类Derived的构造函数中,必须通过super调用父类的构造函数
3.父类Base 没有无参的构造函数,所以必须显示调用父类的有参构造函数,即显示的调用 super("");

编辑于 2018-05-18 09:34:21 回复(2)
调用子类构造方法时,必须先调用父类构造方法,由于父类直接书写了构造方法,所以子类构造方法不能调用父类的默认构造方法,因此编译错误。
发表于 2016-12-12 16:17:06 回复(4)
编程原则,无参构造器必须显式写出来,隐藏的super();也必须写出来,以防万一编译错误
发表于 2019-05-02 14:29:54 回复(1)

D

Base的构造方法只有一个Base(String s),而子类Derived没有调用父类构造方法

发表于 2017-04-03 16:30:38 回复(0)
这题出的还挺好玩,差一点被骗了。
子类构造如果没有显示调用父类带参构造,默认调用父类无参构造,然而父类没有无参构造。所以编译出错。
发表于 2017-02-28 16:24:34 回复(1)
这题主要考察的是构造方法
首先必须知道一点的是:
如果说一个类它本身没有构造方法,系统会默认帮它写一个无参的构造方法,但是一旦自己编写了构造方法,系统则不会再帮你写;
而此题再调用子类的构造方法的时候,会默认调用父类的无参构造方法,然而,此时,父类自己写了有参的构造方法,系统自然就不会帮你写无参的构造方法,所以这题的答案是编译未通过.
发表于 2018-10-25 19:04:43 回复(0)

显然父类没有无参构造器,则子类需要显示调用父类有参构造器,否则编译不通过

发表于 2018-11-07 07:09:08 回复(0)
在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
发表于 2017-05-19 10:30:34 回复(0)
子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可:
publicDerived(String s){
        super("s");
        System.out.print("D");
    }
发表于 2016-12-22 15:43:41 回复(0)
new子类对象时,一定会先调用父类的无参构造器,本题中,因为父类中定义了有参构造器,所以将默认的无参构造器覆盖了,所以需要自己手动定义一个无参构造器,否则会报错。

发表于 2021-12-07 21:48:53 回复(0)
在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
发表于 2018-10-31 10:01:51 回复(0)
因为父类没有无参构造,所以需要显示的调用父类的有参构造
发表于 2018-04-20 20:55:36 回复(0)
无产默认调有参,无产默认调用空产
发表于 2022-03-14 16:15:36 回复(0)
在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。-------
子类构造方法在调用时必须先调用
发表于 2021-11-16 09:14:33 回复(0)
子类继承父类的同时,要调用父类的无参构造方法;
若父类中没有无参构造方法,则需要在子类构造方法中先调用父类的构造方法
发表于 2021-09-09 09:32:13 回复(0)
子类构造方法在调用时必须先调用父类的,由于父类没有无参构造方法,所以必须在子类中显式调用,修改子类构造方法如下所示:
publicDerived (String s) {
        super(s); //或  super("S");  等等反正正确调用父类的构造方法就行了。
        System.out.print("D");
    }

发表于 2021-03-10 15:13:02 回复(1)

要先知道:

  1. Java中通过new关键字实例化一个类的对象时,会自动调用该类的构造方法。
  2. Java中的每一个类中至少有一个构造方法。如果在一个类中没有显式定义一个构造方法,系统就会自动为这个类创建一个默认的无参构造方法,且方法体为空。如一个类中已经自定义了构造方法,系统将不再提供默认的无参构造方法。
  3. 在继承中,由于子类继承于父类,当实例化子类的对象时,在子类的构造方法中一定会调用父类的构造方法。此时,在子类的构造方法中通过super关键字指定调用父类的哪一个构造方法,如果没有指定,则在实例化子类实例对象时,会默认调用父类的无参构造方法。

再来看题:

子类中没有用super关键字去调用父类的构造方法,那我们现在就去看父类中是否有无参构造方法,显然此时的父类中定义了一个有参构造方法,却未定义无参构造方法,因此就会编译出错。

编辑于 2020-02-29 19:16:54 回复(0)