A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wjj410830911 中级黑马   /  2013-11-11 18:02  /  1561 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Parent {
  2.     Parent() {
  3.         System.out.println("parent");
  4.     }
  5. }
  6. public class Child extends Parent {
  7.     Child(String s) {
  8.         System.out.println(s);
  9.     }
  10.     public static void main(String[] args) {
  11.         Child child = new Child("child");
  12.     }
  13. }
复制代码
为什么这道题编译出来是parent   child啊?  我觉得只应该打印child
因为在主函数里创建child的对象,调用了Child的方法 所以应该输出s
s又赋值了child  所以只应该打印child啊  为什么parent也打印出来了?
如果只想打印child怎么办?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

6 个回复

倒序浏览
子类继承了父类的构造函数,在子类中所有构造函数中默认都有个super()调用了父类的无参构造函数,建立子类对象时会访问父类无参的构造函数,所以会有parent.
若只想打印child,父类无参构造函数为空即可。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
class Parent {

    Parent() {//程序执行的第二步
             System.out.println("parent");
    }
   
}
public class Child extends Parent {
    Child(String s) {//程序执行的第三步
        System.out.println(s);
    }
   
    public static void main(String[] args) {
        Child child = new Child("child");//程序执行的第一步
    }
}
//
/*
* 为什么会打印出来parent  这就是程序的执行顺序问题了  java虚拟机在加载类Child时 ,
* 先加载Parent的构造函数,然后再加载Child的静态代码块和构造函数(你的子类没有静态代码块,)
* 所以运行程序的时候先执行了父类的构造函数 打印了parent,然后执行子类的构造函数打印s,
*
* 如果只想打印child 那你的Perent(父类)类的构造函数改成默认或为空,就是删除 System.out.println("parent");这句话
*
* 有问题可以继续问   加油!
*/

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
这程序看的好别扭,在主函数的类里边构造函数,然后又在主函数所在的类创建本类对象,最好别这样写啊,
之所以会打印出parent,是因为子类里边隐藏了一个super( ),调用了父类中空参的构造方法,要想不打印parent,就不能让子类访问到父类空参数的构造方法。可以去掉父类的空参数的构造函数,父类默认有一个。
回复 使用道具 举报
俩类之间关系为继承关系的时候,子类的构造方法第一行代码都会执行父类的无参构造方法(没父亲哪来的孩子= =!)。所以执行结果为:
parent   
child
若只想打印child,父类无参构造函数为空即可。
回复 使用道具 举报
这时继承。在创建子类对象时,传参数访问子类的有参数构造函数,但在child时,方法child内第一行默认了 super(),会去访问父类的空参数函数,就先输出了pareat。然后回来输出child。呵呵,你记住继承,子类一定会有super访问父类的构造函数。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
    因为父类的数据子类可以直接获取,所以子类对象建立时,会先查看父类是如何对这些数据初始化的。在子类的每一个构造函数内的第一行都会有一句隐式super(),它会访问父类的空参函数,所以就会先执行了父类再返回执行了子类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马