关于JAVA继承的问题:子类无条件地继承父类不含参数的构造函数。这句话对还是错为什么。

Python010

关于JAVA继承的问题:子类无条件地继承父类不含参数的构造函数。这句话对还是错为什么。,第1张

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

首先是在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().

一,java子类不能继承父类的构造方法(可以调用,但不是继承):

1、构造方法的定义是与类的名称相同:如果子类能够继承父类的构造方法,那么在子类的构造方法中就有不同于子类名称的构造法;

2、这与构造方法的定义不符,因此子类是不能继承父类的构造方法的;

3、以上参考资料来源:http://bbs.csdn.net/topics/360118234

二,子类继承父类时,需要注意以下三点:

1、在子类继承父类的时候,子类必须调用父类的构造函数;

2、在父类有默认构造函数,子类实例化时自动调用,在父类没有默认构造函数,即无形参构造函数,子类构造函数必须通过super调用父类的构造函数;

3、在java的继承当中子类是不可以继承父类的构造函数,只能调用父类的构造函数。