this关键字的使用:
1.this可以用来修饰:属性、方法、构造器
2.this修饰属性和方法:
this理解为:当前对象 或者 当前正在创建的对象
2.1.在类的方法中,我们可以使用“this.属性”或者"this.方法"的方式,调用当前对象的属性或者方法,但是通常情况下,我们都选择省略"this."。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式地使用“this.变量”的方式,表明此变量是属性,而非形参。
2.2.在类的构造器中,我们可以使用“this.属性”或者"this.方法"的方式,调用当前正在创建的对象属性或者方法,但是,通常情况下,我们都选择省略"this."。特殊情况下,如果构造器的形参和类的属性同名时,我们必须显示地使用"this.变量"的方式,表明此变量是属性,而非形参。
3.this调用构造器
3.1.我们在类的构造器中,可以显示地使用“this(形参列表)”的方式,调用本类中指定的其他构造器
3.2.在构造器中不能通过“this(形参列表)”方式调用自己,不然就是死循环了
3.3.如果一个类中有n 个构造器,则最多有n - 1 构造器使用了"this(形参列表)",因为不能有n 个,不然成了一个环,就又变成了死循环
3.4.规定:”this(形参列表)“只能在首行
3.5.构造器内部,只能有一个"this(形参列表)"用于调用其他构造器
(注意:当通过"this(形参列表)"调用其他构造器的时候,只创建一个对象!!)
class Person{ private int age; private String name; public Person(){ this.eat(); } public Person(String name){ this(); //在这里调用空参的构造器下的东西 this.name = name; } public Person(int age){ this(); this.age = age; } public Person(String name, int age){ this(age); //这里也可以传入一个形参,调用上面一个构造器下的代码 this.name = name; this.age = age; } public void setName(String name){ this.name = name; } public String getName(){ return this.name; }
super关键字的使用:
1.super调用构造器
1.1.我们可以在子类的构造器中显式地使用“super(形参列表)”的方式,调用父类中声明的指定的构造器
1.2.“super(形参列表)”的使用,必须声明在子类的构造器的首行
1.3.我们在类的构造器中,针对“this(形参列表)”或者“super(形参列表)”只能二选一,不能同时出现
1.4.在构造器的首行,没有显式地声明“this(形参列表)”或者“super(形参列表)”的时候,则默认调用的是父类中的空参的构造器
1.5.在类的多个构造器中,至少有一个类的构造器中使用了“super(形参列表)”,调用父类中的构造器