-
构造器不能继承。
-
子类的构造器一定会默认调父类的无参构造器,除非写代码明确指定调用父类的有参数构造器!调父类构造器并不是创建父类的实例,只是执行构造器内的代码而已。
-
子类的构造器中调用父类无参构造器的代码可以不写,编译器会自动添加。
-
声明定义类的时候,不写构造器,编译器会默认提供无参构造器,而且这个无参构造器会默认调用父类的无参构造器;如果写了有参构造器,则编译器不会默认提供无参构造器,那么在写派生类(子类)的时候会报编译错误,因为子类的构造器一定会默认调父类的无参构造器,但是父类没有,所以肯定报错。因此所有的类都必须提供无参数构造器,减少继承时候的麻烦。
-
调用父类构造器的代码必须写在子类构造器的第一个语句中。
-
构造器可以访问成员变量
-
构造器可以直接调用成员方法
-
使用
this()
和super()
调用构造器,必须写在构造方法体内,且必须写在第一个语句中 -
this()
和super()
不可以同时存在构造方法体内,这就意味着如果构造器内写了this()
,就不能再写super()
,且编译器也不会自动添加super()
语句。注意,这里虽然构造器没有直接去调父类的构造器,但是调用的本类其它构造器有调用父类的构造器就可以了,所以最终都会先调用父类的构造器
注意: 1.编译器默认添加的调用父类构造器的语句 super();
,()
表示参数列表,你要调用父类有参构造器,就往 ()
添加有关的参数。 2.this()
表示调用本类的无参构造器,调用本类有参构造器你就往 ()
内添加相关的参数。 3.为什么要调父类的构造器,因为子类继承了父类所有的内容,所以子类的对象肯定包含父类的所有内容,那么就必须通过调父类构造器的方式才能取到父类的内容,然后再添加子类自己的内容在对象里面。这个有点像父类的对象和子类的对象合二为一。当然最终只有一个子类的对象。这个子类对象的示意图如下: