java继承中构造函数的调用顺序

Python016

java继承中构造函数的调用顺序,第1张

首先是在main函数里面,jvm发现了程序建立了一个Sanwich的对象,于是jvm便会到Sanwich里面找到构造函数构造一个Sanwich对象。但是jvm发现Sanwich是PortableLunch的子类,所以jvm会要先构造PortableLunch的对象。可是PortableLunch类又是Lunch的子类,所以jvm会要去构造Lunch对象。同理,Lunch又是Meal的子类,因而jvm会要构造Meal的对象。之后jvm会依照Meal、Lunch、PortableLunch、Sanwich的层次结构逐级构造出Sanwich对象,从而打印出Meal()、Lunch()、PortableLunch()、Sanwich()。但是由于Sanwich类中有Bread、Cheese、Letter三个变量,如果你没有他们实例化的话,那么程序就此结束;可是你给这三个变量实例化了,因此Sanwich在调用构造函数Sanwich()之后,回过头来处理这三个实例化了的变量。所以程序又会打印出Bread()、Cheese()、Letter().

不对的,构造函数是不能继承的。子类可以继承父类的所有成员变量和成员方法,但不能继承父类的构造方法。这就意味着,子类不能用“.”来操作父类的构造方法。但实际上,子类的构造方法中一定会调用父类的构造方法,不过这种调用只是为了创建子类对象进行的初始化处理。而不会创建父类对象。可以使用super()调用父类构造方法。