黑马程序员技术交流社区
标题:
关于继承的问题
[打印本页]
作者:
wjj410830911
时间:
2013-11-11 18:02
标题:
关于继承的问题
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 child啊? 我觉得只应该打印child
因为在主函数里创建child的对象,调用了Child的方法 所以应该输出s
s又赋值了child 所以只应该打印child啊 为什么parent也打印出来了?
如果只想打印child怎么办?
作者:
剑魂
时间:
2013-11-11 18:08
子类继承了父类的构造函数,在子类中所有构造函数中默认都有个super()调用了父类的无参构造函数,建立子类对象时会访问父类无参的构造函数,所以会有parent.
若只想打印child,父类无参构造函数为空即可。
作者:
不抛弃不放弃
时间:
2013-11-11 19:54
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");这句话
*
* 有问题可以继续问 加油!
*/
作者:
明月几时有
时间:
2013-11-11 21:52
这程序看的好别扭,在主函数的类里边构造函数,然后又在主函数所在的类创建本类对象,最好别这样写啊,
之所以会打印出parent,是因为子类里边隐藏了一个super( ),调用了父类中空参的构造方法,要想不打印parent,就不能让子类访问到父类空参数的构造方法。可以去掉父类的空参数的构造函数,父类默认有一个。
作者:
王雨神
时间:
2013-11-11 21:56
俩类之间关系为继承关系的时候,子类的构造方法第一行代码都会执行父类的无参构造方法(没父亲哪来的孩子= =!)。所以执行结果为:
parent
child
若只想打印child,父类无参构造函数为空即可。
作者:
卑微の小幸福
时间:
2013-11-11 22:25
这时继承。在创建子类对象时,传参数访问子类的有参数构造函数,但在child时,方法child内第一行默认了 super(),会去访问父类的空参数函数,就先输出了pareat。然后回来输出child。呵呵,你记住继承,子类一定会有super访问父类的构造函数。
作者:
天ya~_琼楼
时间:
2013-11-11 23:51
因为父类的数据子类可以直接获取,所以子类对象建立时,会先查看父类是如何对这些数据初始化的。在子类的每一个构造函数内的第一行都会有一句隐式super(),它会访问父类的空参函数,所以就会先执行了父类再返回执行了子类。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2