我也知道子类不能继承父类的构造方法,但是大家看看下面这短代码,怎么可以有父类构造方法里的输出呢?class SuperClass {
int x; SuperClass() {
System.out.println("in SuperClass : x=" + x);
}
}class Sub extends SuperClass {
int x;
}public class Test {
public static void main(String args[]) {
Sub subC = new Sub(); }
}
int x; SuperClass() {
System.out.println("in SuperClass : x=" + x);
}
}class Sub extends SuperClass {
int x;
}public class Test {
public static void main(String args[]) {
Sub subC = new Sub(); }
}
楼主【cupid_love】截止到2008-07-29 16:37:31的历史汇总数据(不包括此帖):
发帖的总数量:4 发帖的总分数:20 每贴平均分数:5
回帖的总数量:13 得分贴总数量:1 回帖的得分率:7%
结贴的总数量:2 结贴的总分数:20
无满意结贴数:0 无满意结贴分:0
未结的帖子数:2 未结的总分数:0
结贴的百分比:50.00 % 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
public Sub() {
super(); //会首先执行父类的构造。所以就打印了父类构造里的语句。
}
默认的可以不写。
package com.zhangkai;
class Par {
/**
* 父类构造方法
*/
public Par() {
System.out.println("父类----constructor");
}
/**
* 静态代码块
*/
static {
System.out.println("父类----static");
}
/*
* 父类普通代码块
*/
{
System.out.println("父类普通代码块");
}
}
public class Sub extends Par {
public Sub() {//默认子类构造函数
super();//可以不写,如果父类构造函数带参数,那就必须写上,如:super(5);
System.out.println("子类------constructor");
}
/**
* 子类静态代码块
*/
static {
System.out.println("子类---static");
}
/*
* 子类普通代码块
*/
{
System.out.println("子类---普通代码块");
}
public static void main(String[] args) {
Sub sub = new Sub();
}
}
打印结果:
父类----static
子类---static
父类普通代码块
父类----constructor
子类---普通代码块
子类------constructor
/*顺序。
父类静态代码块
子类静态代码块
父类普通代码块
父类构造
子类普通代码块
子类构造*/
严格按照执行顺序,就不会出错了虽没分,复习下。
public Sub() {
super(); //会首先执行父类的构造。
}
这是默认的,类似的还有这种情况,在构造子类的时候系统会这样,先在该构造方法里有没有this(),然后在找有没有super(),若是没有就自动加上super().