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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java集合类的继承关系
MindManager文档下载地址:http://download.csdn.net/detail/ash_zheng/9524422Java中文API下载地址:http://download.csdn.net/detail/ash_zheng/9524424描述:黄色箭头代表implements关系,子项与父项是extends关系。
java中关于继承的问题
java中关于继承
Java学习之继承中的执行顺序详解
代码块(理解) (1)用{}括起来的代码。 (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率。 B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块。 C:静态代码块 static{}对类的数据进行初始化,仅仅只执行一次。 (3)静态代码块,构造代码块,构造方法的顺序问题?
Java静态属性与静态方法能否被继承的问题
原文链接:点击打开链接 结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是
java 继承特点,注意事项,什么时候用
/* Java中继承的特点: A:Java只支持单继承,不支持多继承。 有些语言是支持多继承,格式:extends 类1,类2,... B:Java支持多层继承(继承体系) */ /* class Father {} class Mother {} class Son exnteds Father {} //正确的 class Son extends Father,Mo
java接口菱形继承
其实菱形继承的副作用只是因为公共基类的成员变量 Java的接口可以做出类似菱形继承的结构,但因为公共基类(接口?)中没有成员变量,所以没有二义性问题啦 当然也可以使用内部类(嵌套类)来实现类似多继承,不必担心会发生钻石危机,因为用内部类实现多继承过程中由设计者重新进行函数命名,从而避免了钻石危机。下面用代码来进行说明:       要继承的类 Father。      publi
静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
1.静态属性和静态方法是否可以被继承?是否可以被重写? 1)先说是否可以被继承 public class One { //静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? public static String one_1 = "one"; public static void oneFn() { System.out.println...
IO学习(三)常见IO类继承关系图
字符流和字节流的区别: 字节流就是按照byte单位来读取,可以用来读取其他格式的文件 字符流是在字节流的基础上实现的,用来读取文本文件,一个字符一个字符的读取 如果字节流是一滴水一滴水的转移,那么字符流是用勺子一勺一勺水的转移,速度明显加快了 当然使用缓冲Buffer以后,就是一桶一桶水的转移了
使用继承需要注意事项
使用继承注意两点: 第一:子类无法继承private修饰的属性和方法 第二:子类无法继承父类的构造方法 子类除了继承父类的属性和方法之外,还可以有自己的属性,但是调用从父类继承的方法却不能获取,比如: public class PersonnelDept extends Department{ private int count;//本月计划招聘人数 } 这段代码中,我们的子类人
JAVA静态方法是否可以被继承?(对原文做了修改)
结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. (王员外笔记:对,这里官方叫法是hide,牛逼)  原因:   1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或