Java面向对象(查缺补漏——叁)
其它关键字:this、super、static、final、abstract、interface、package、import等…
This调用属性和方法
我们新建一个Person类,类中给name,age两个属性,这里用到封装性的概念,所以这两个属性的修饰符是private的。
接下来我们创建属性并为其赋值,当set方法的形参名称与属性名称不同时我们发现赋值完全没问题,运行结果也正常。
但是我们之前说过,变量名这些的最好是做到见名知意,好那么我就将形参名称改为name,这样的话,我就明白了,我这是要给同类中的name属性去赋值的。然而当我们修改完成并运行程序时发现,没有赋值成功
显而易见,这是把形参赋给它自己本身了,所以赋值未成功。
那这个时候我该怎么办?怎么去区分前面那个叫属性,后面这个是形参呢?
注意:这时候我们就引用一个关键字this,我们可以吧this理解为,当前对象!!
那我加上this.之后,就可以理解称为当前对象的name,当前对象的age。
运行成功~
总结:
1.this可以用来修饰或者说是调用: 属性、方法、构造器
2.this修饰属性和方法
this理解为:当前对象
2.1在类的方法中,我们可以使用“this.属性”或“this.方法()”的方式,调用当前对象属性或者方法。
但通常情况下,我们都选择省略"this."
特殊情况下:如果方法的形参,和类的属性同名时,我们必须显示的使用"this.变量"的方式来表名此变量是属性,而非形参
2.2在类的构造器中,我们可以使用“this.属性”或“this.方法()”的方式,调用当前正在创建的对象属性或者方法。
但通常情况下,我们都选择省略"this."
特殊情况下:如果方法的形参,和类的属性同名时,我们必须显示的使用"this.变量"的方式来表名此变量是属性,而非形参
This调用构造器
考虑到下图这种情景,开发中常见的情景,比如初始化人物时都是布衣短剑,后面氪金换装相当于给人物的一些属性重新赋值。
那么上述这种情况明显出现了代码冗余现象,我们就考虑怎,怎么才能让这冗余减少呢?
思路1:可以把重复的代码抽取出来,重新写一个方法,然后用this调用到每个构造器中
思路2:我们可以通过this的方式来调构造器
如上图,this()表示我们调的空参构造器,我们在使用有参构造器时自动调用了空参构造器,执行了40行代码,一劳永逸懒出天际,也可以如下图this调用带参数构造器
上图可以看出,Java自带工具包底层也是这样的设计。
总结:this调用构造器
① 我们在类的构造器中,可以显示使用"this(形参列表)"方式,来调用,本类中指定的其它构造器
② 构造器中,不能通过"this(形参列表)"的方式来调用自己
③ 如果一个类中有n个构造器,则最多有 n-1 个构造器中使用了"this(形参列表)"方式
④ 规定:"this(形参列表)"方式 必须声明在当前构造器的首行
⑤ 构造器内部 最多只能声明一个"this(形参列表)",用来调用其它构造器