本文共 693 字,大约阅读时间需要 2 分钟。
工作久了,很多基础性的知识也就忘了,Object-C如此,java也是。
关于java构造方法的几个注意点如下:
经反编译得知,程序编译时,会默认添加一个无参构造器。但是如果父类自己实现了重载的构造方法,那么将不会默认创建无参构造器。
故子类构造方法会报错,因为子类构造器中默认第一行会被默认添加super()调用父类构造方法,而此时父类已经没了无参构造方法。
所以如果父类没有无参构造方法,子类构造方法只能调用父类自己实现的构造方法了,如下图子类构造方法可以自己调用super("实参名");
我们修改一下第2点中的代码,初始化一个对象Student,Student类继承自Person类
Student stu = new Student();
事实上,Student实例在调用构造方法之前,就已经初始化了。理由如下:
a)下图this在构造方法的super()时已经存在值,而此时子类成员变量stuNum和父类成员变量name都为默认值0和null。
b)子类构造方法执行完super()后,子类成员变量stuNum和继承父类的name成员变量都有了值。
故,对象在堆中开辟内存初始化,在构造方法之前就已完成,构造方法中的super()作用在于给父类的私有成员变量进行显示初始化,包括构造代码块的内容,这也是为什么自己写super()必须得放在第一行,我们的指定赋值必须在super()之后,否则就报错的原因。
转载地址:http://dkdqb.baihongyu.com/