首页 > 试题广场 >

下面的输出结果是:

[单选题]
	
public class Test { 
    public static void main(String[] args) {
    Father a = new Father();
    Father b = new Child();
  }
} 
class Father { 
    public Father() {
    System.out.println("我是父类");
  }
} 
class Child extends Father { 
    public Child() {
    System.out.println("我是子类");
  }
}
	
	


  • 我是父类
    我是父类
    我是子类
  • 我是父类
    我是子类
    我是子类
  • 我是父类
    我是父类
  • 我是父类
    我是父类
    我是父类
这道题,首先没有初始化对象根本没有输出。
其次,即使初始化了对象,也该是输出
我是父类
我是父类
我是子类
发表于 2018-11-01 10:15:53 回复(21)
... 牛客需要加强的两个地方:
1. 题目的审查
2. 代码题目的格式化缩进,好多题都这样 看得不舒服
发表于 2018-10-01 01:39:59 回复(3)
自己改了一下:
public class Test extends Demo{
    public Test() {
        System.out.println("test");
    }

    public static void main(String[] args) {
        Demo demo = new Demo();
        Test test = new Test();
    }
}

class Demo{
  public Demo() {
      System.out.println("demo");
  }
}
可能他要考查的就是继承上的构造方法的执行顺序
  • 父类new直接执行构造方法
  • 子类new,先执行父类的构造方法,再执行自己的构造方法

发表于 2019-12-20 21:52:15 回复(5)
记录楼里大佬一句话:父类new,执行父类构造方法。子类new,先执行父类构造方法,再执行子类构造方法。
发表于 2021-09-24 13:24:38 回复(4)
好奇怪的一道题
发表于 2018-09-14 15:11:46 回复(0)
我觉得这道题考察的是 初始化父类子类的顺序问题 先初始化父类的静态部分,然后子类的静态部分 再是父类的成员变量,子类的成员变量 🤔🤔🤔 这道题我做错了,毕竟继承的是AA,跟题中的father类没有关系😭😭😭
发表于 2018-09-25 23:31:48 回复(0)
子类默认调用父类的无参构造方法
发表于 2022-01-03 17:19:40 回复(0)
当子类A继承父类B,A a = new A();时,则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块,执行的先后顺序是:
父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数。
说明,实例化子类对象时,首先加载父类class文件进内存,静态代码块随类的创建而执行,所以首先是父类静态代码块最先被执行,子类class文件再被加载,同理,子类的静态代码块被先执行。实例化子类对象要先调用父类的构造方法,而调用父类构造方***先执行父类的非静态代码块。
发表于 2021-07-25 18:10:02 回复(0)
你自己都知道出题不严谨了你还丢上来干什么?还嫌我得的分不够低么。。。
发表于 2019-12-06 11:32:46 回复(1)

错题地址:https://www.nowcoder.com/test/question/ec83945fe29f44abbdd6d156fbeccdb1?pid=13049675&tid=19211411

错误类型:

  • 题目代码有误
    • 两个类没有结束花括号
    • 引号为中文引号
    • 子类继承的类是没定义的AA类
  • 还原正确代码后,选项有误:选项应该是没有输出( exited with status 0)。

原题代码

public class  Father{
public Father(){
System.out.println(“我是父类”); }
public class  Child extends  AA {
public Child(){
System.out.println(“我是子类”);
}

理想中的题目代码

public class Untitled {
    public static void main(String[] args) {
        Father   a;
        Child   b;
    }
}

class  Father{
    public Father(){
        System.out.println("我是父类");
    }
}
class  Child extends  Father {
    public Child(){
        System.out.println("我是子类");
    }
}
编辑于 2018-10-08 11:16:54 回复(7)
Father a = new Father();new了一个Father类型的对象,直接调用Father类的构造方法输出 我是父类。Father b = new Child();Father类型,new的是子类Child,先去找父类的构造方法输出 我是父类,再去子类Child找子类构造方法,输出 我是子类。因此,最终结果是:我是父类 我是父类 我是子类
发表于 2022-09-05 08:19:22 回复(0)
子类无参构造有一个隐藏的super()会访问父类无参构造
发表于 2022-07-20 17:35:54 回复(0)
子类初始化前,先对父类初始化
发表于 2021-11-28 23:43:23 回复(0)
    Father a = new Father();   //---> "我是父类"
    Father b = new Child();  //--> 我是父类 我是子类
第二个对象实例化是多态的表现,父类引用指向子类对象。在实例化的时候,内部代码第一行会自动调用super(),也就是会先实例化一次Father() ,得以打印出第二个”我是父类“。然后打印出”我是子类“
小白现学现卖,说的不通顺,希望指正。
发表于 2021-07-25 11:57:30 回复(0)
如果有个答案为 我是父类 我是子类,会有多少人选
发表于 2021-03-26 19:24:58 回复(2)
MD,就不能好好排版吗
发表于 2020-10-07 10:01:04 回复(0)
现在可以了。

发表于 2020-09-16 09:49:04 回复(0)
vky头像 vky
AA是什么鬼
发表于 2018-09-20 21:44:13 回复(0)
Java程序初始化顺序: 1父类的静态代码块 2子类的静态代码块 3父类的普通代码块 4父类的构造方法 5子类的普通代码块 6子类的构造方法
发表于 2023-04-25 16:54:05 回复(0)
父类new直接执行构造方法 子类new,先执行父类的构造方法,再执行自己的构造方法
发表于 2022-09-29 07:06:15 回复(0)