构造方法
在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名、年龄等属性信息。
此时就需要构造方法了。
语法格式:修饰符 方法名(参数列表){ }
注: 1、构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。
2、构造方法名称必须和类型保持一致,包括大小写。
3、构造方法没有具体的返回值,但可以有return语句,如 return;
4、当没有指定的构造方法时,系统会自动添加无参的构造方法。
5、当有指定的构造方法时,无论是有参还是无参的构造方法,都不会自动添加无参的构造方法。
6、构造方法的重载:方法名相同,但是参数列表不同的多个方法,调用时会自动根据不同的参数选择相应的方法。
内存图解:
构造方法和一般方法的区别:
构造方法在对象创建时就执行了,而且只执行一次。
一般方法是在对象创建后,需要使用时才被对象调用,并可以被多次调用。
有了构造方法之后可以对对象的属性进行初始化,那么还需要对应的set和get方法吗?
需要相应的set和get方法,因为对象在创建之后需要修改和访问相应的属性值时,在这时只能通过set或者get方法来操作。
this关键字
this.成员变量 用来区分成员变量和局部变量
this() 在一个类里面的构造方法中来调用本类的其他构造方法。
super关键字
在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句。
格式:
调用本类中的构造方法
this(实参列表);
调用父类中的空参数构造方法
super();
调用父类中的有参数构造方法
super(实参列表);
问题总结:
1、为什么子类对象创建都要访问父类中的构造方法?
因为子类继承了父类的内容,所以创建对象时,必须要先看父类是如何对其内容进行初始化的
2、子类中的构造方法为什么会有一句隐式的super()呢?
子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。
3、当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。
4、如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句还有吗?
没有的,因为this()或者super(),只能定义在构造方法的第一行,因为初始化动作要先执行。
5、父类构造方法中是否有隐式的super呢?
有的。只要是构造方法默认第一行都是super();
6、父类的父类是谁呢?super调用的到底是谁的构造方法呢?
Java体系在设计,定义了一个所有对象的父类Object
注意:
类中的构造方法默认第一行都有隐式的super()语句,在访问父类中的空参数构造方法。所以父类的构造方法既可以给自己的对象初始化,也可以给自己的子类对象初始化。
如果默认的隐式super()语句在父类中没有对应的构造方法,那么必须在构造方法中通过this或者super的形式明确要调用的构造方法。