java中构造方法的理解,super()与构造方法,无参,有参构造方法,this()与构造方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33322074/article/details/86030836

一、为什么要引入构造方法。

当创建对象的时候需要对属性值初始化,构造方法,即对象创建时要执行的方法。

要求在实例化的同时,就指定好name,和age的值。这就要用到构造方法。又叫做构造器Constructor.

二、构造方法的定义格式

构造方法在new的时候自动执行。且只执行一次。new一次执行一次。

注意:每个类都有构造方法,即使不写也有,编译时javac会自动检查类是否有构造方法,如果有,就执行,没有就自动添加一个。但是,如果你写了一个带有参数的构造方法,而没有写无参构造方法,就会报错。

如上图:如果不写无参构造方法,就会报错。同时也证明了,构造方法是可以重载的。

三、构造方法的重载

如果构造方法发生了重载,就要创建无参构造方法,否则会报错。

那么在创建对象时,需要通过构造方法来创建对象的,上图说了,只有构造方法结束了,整个对象才算建立完成。因此可以通过不同的构造方法来创建对象。如图:分别用两种构造方法来创建对象。

分析:无参构造方法和实例化之间的关系。

无参构造方法,可以不写,但是最终都会有的,跟是否实例化无关。但是如果权限是private,那么其他类就无法通过无参构造方法实例化,就会报错。如图所示:

四、构造方法和其他方法的区别

1、构造方法只能执行一次,其他方法执行次数没有限制。

2、定义格式不同。构造方法没有返回值,必须与类名相同。

五、this在构造方法之间的调用

首先说一下this的用处。

1、this.区分局部变量和成员变量同名情况。

2、this用在构造方法中,用于调用了有参构造方法。

格式:this(参数列表); 此语句必须写在第一行,才有效。

此语句的意义:减少了代码的书写量。

六、super关键字在构造方法中的应用。

首先要明白super关键字的作用:

1、super是调用父类的成员方法或成员变量。

但是还有一个问题:

也就是说子类对象中,父类的构造方法会先执行。那么为什么要执行父类构造方法呢?

假设,创建了一个父类,含有一个成员属性a=1;含有一个构造方法,将a=5;。因为如果子类创建的对象调用父类的成员变量a时,在不添加super()时,会得到a=1;如果添加super()就会得到a=5;我们都知道,构造方法在创建对象时执行,a应该等于5,故如果不调用super()就会得到错误的值。

2、super()在构造方法中是调用父类构造方法的意思。

当创建子类对象时,父类对象先进内存。这样子类才能自动拥有父类的成员。

3、子类的构造器,无论重载多少个,第一行必须是super();当你不写时表示空参super();是否写参数,要根据父类决定,父类有参数,那么子类的super()必须有参数。

4、构造方法无法继承,自然也没有重写这个概念。

5、super()语句必须是构造方法的第一行代码。

总结一下:其实这些内容说白了,就是在说一句话。

即:如果父类中没有无参构造方法,那么子类必须用super(带参)显示的调用父类的构造方法。

super是父类对象引用,this是本类对象引用。super(),this()都必须放在构造方法的第一行,super()和this()绝不能一块用,super(),this()无参时可以省略不写。

上图很重要。终于明白了为什么有的类没有在有参数构造函数的情况下,没有写无参也可以。问题的关键是对象是有参还是无参来构建的。若用无参对象构建,那么类中必须有无参构造函数,(在类中含有有参构造函数的情况下。)

快捷键:ctrl+T   用于打开继承关系图。

注意:若不确定该类是否是抽象类,可以这样想,该类的方法在做什么?如果方法内容不明确,就是抽象类。

猜你喜欢

转载自blog.csdn.net/qq_33322074/article/details/86030836