首页 > 试题广场 >

如下代码的结果是什么? class Base { B

[单选题]

如下代码的 结果是什么 ?

class Base {
    Base() {
    System.out.print("Base"); 
    }
}
public class Alpha extends Base {
    public static void main( String[] args ) {
        new Alpha();
        //调用父类无参的构造方法
        new Base();
    } 
}

  • Base
  • BaseBase
  • 编译失败
  • 代码运行但没有输出
  • 运行时抛出异常
父子类的初始化顺序: 父类的static相关代码-子类的static 相关代码 - 父类变量,初始化块,父类构造方法 - 子类变量,初始化块,子类构造方法。
发表于 2018-03-20 13:18:22 回复(0)
更多回答
在执行new Alpha()时,会先执行父类的构造方法,在执行相应的子类的构造方法,所以此处会打印Base,在执行new Base()时,会直接执行Base中无参构造器的代码,再输出Base,所以选B
发表于 2016-12-17 19:11:31 回复(13)
选B
子类构造器的默认第一行就是super(),默认调用直接父类的无参构造。这也就是一旦一个子类的直接父类没有无参的构造的情况下,必须在自己构造器的第一行显式的指明调用父类或者自己的哪一个构造器。
发表于 2018-07-10 09:53:51 回复(3)
谁能告诉我那五个横线是干嘛的,这能编译过我倒立**
发表于 2017-05-16 00:48:25 回复(19)
创建子类的对象时,会先执行父类的构造函数。
发表于 2017-04-07 21:14:54 回复(0)
我想从这个角度解释一下,这里父类的构造函数的访问权限修饰符是default,也就是只要同一个包下的都可以访问。
构造函数可以用所有的访问权限修饰符来修饰,但是当用private修饰的时候,或者是超过了子类的访问范围时,是不能调用的。
发表于 2020-06-17 10:26:23 回复(1)
new Base();和new Alpha();两句只是在Java堆里面开辟了空间,但没有指向这两个空间的引用。(Java里面没有指针的概念,不过引用和指针一样),但是开辟这两个空间的时候就完成了构造函数的调用。
发表于 2017-07-14 22:26:27 回复(2)
由于Alpha类是继承了Base类,所以在进行new Alpha()的时候,首先要加载父类的构造方法,然后再执行子类的构造方法,先输出一个Base。而后,在new Base()的时候,执行输出语句,得到Base,答案是B
发表于 2019-03-09 10:09:05 回复(0)
如果在子类的构造方法的定义中没有明确调用父类的构造方法,则系统在执行子类的构造方法时会自动调用父类的默认构造方法,即无参数的构造方法
发表于 2021-03-04 16:42:52 回复(0)
因为存在的有继承,所以会先执行父类的构造方法,在执行相应的子类的构造方法,所以在此处会打印base,在执行new Base()时,会直接执行base中无参构造器的代码,再输出base,所以选B
发表于 2018-12-31 16:09:58 回复(0)
题里面已经暗示答案了。666
发表于 2018-04-12 18:31:45 回复(1)
子类构造器的默认第一行就是super(),默认调用直接父类的无参构造。 这也就是一旦一个子类的直接父类没有无参的构造的情况下,必须在自己构造器的第一行显式的指明调用父类或者自己的哪一个构造器。
发表于 2021-11-13 18:52:33 回复(0)
个人认为本题的考察点不在于考察在new一个子类的对象时是否会调用父类的构造方法,而在于考察同一个文件中public类只能有一个,且该类名必须与文件名一致(内部类除外)
发表于 2020-12-10 19:59:05 回复(0)
一句话,生成子类的对象要先调用父类的构造方法
发表于 2018-08-30 16:29:18 回复(0)
这个题有点问题,必须在子类继承父类的前面加上static关键字,因为你们主函数就是static的方法。
也就是将第6行改成:public statci void Alphla extends Base{...}
发表于 2017-08-01 10:51:12 回复(2)
这正常的谁不知道选B啊,关键你代码后面整一个-----   调用父类无参的构造方法  我以为这是代码里的。 java注释不是----- 呵呵哒
发表于 2017-03-20 22:58:45 回复(1)
子类的构造器会默认写super
发表于 2024-02-20 19:19:47 回复(0)
创建对象时,因为继承的关系,自动调用了父类的构造块。
后new Base(),再次调用了父类的构造块
发表于 2023-04-30 23:56:45 回复(0)
这道题考的是类的加载时机,在new Alpha的时候先回去创建父类的构造函数,然后再创建子类的构造函数,这就导致有两句base
发表于 2023-01-22 16:54:30 回复(0)
继承 先父类构造器再子类构造器
发表于 2022-10-20 08:11:30 回复(0)
public class Alpha extends Base {
    public static void main( String[] args ) {
        new Base();      // 默认第一行会调用父类的无参构造器
        new Alpha();
        //调用父类无参的构造方法
        new Base();     // 第二次调用
    }
}

发表于 2022-10-11 22:16:36 回复(0)