2 qq 23667859 qq_23667859 于 2016.09.26 20:00 提问

Java中继承问题,以及流程

public class Test{
public static void main(String[] args){
new Child().print();
}
}
class Parent{
protected String str="parent";
protected void print(){
System.out.println(str);
}

public Parent(){
    System.out.println(str);
    print();
    System.out.println(str);
}

}

class Child extends Parent{
protected void print(){
str="child";
System.out.println(str);
}
}
请问这段代码怎样执行的?

3个回答

qq_29594393
qq_29594393   Ds   Rxr 2016.09.26 20:38

先输出一次parent ,输出三次child
先看主函数 定义一个child 对象并调用print()
child 继承自parent ,先调用parent 的构造方法 ,parent 构造方法里面(输出一次str ,调用一次child 的print(重写了) 函数,str(是继承自parent的,由于在child中没有声明这个字符串,也就是没有重写属性) 修改为child并输出 ,后面在输出一次str(这时候是child))
然后再调用child的print方法在输出一次child

sinat_35110156
sinat_35110156   2016.09.26 21:48

其实执行流程是:
加载类时先走构造方法,如果有继承关系,先加载父类。

u013829202
u013829202   Rxr 2016.09.27 11:29

先看程序入口main方法。 分开看。 new Child(); 先去找子类的无参构造,结果没有。直接就调用父类的无参构造。
输出:parent child child。 接着执行print();方法。输出child. 你自己看下他的执行顺序就明白了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!