一、this关键字的作用:
·表示类中的属性
·可以使用this()调用本类中的构造方法.()里面的参数不同,会自动去调用相应的构造方法
·this()表示当前对象的引用
例1:当参数名属性名相同时通过this区分
class Person{
private String name;
private int age;
public Person(String name, int age){
// name = name;
this.name = name; //明确表示为类中的name属性赋值
// age = age;
this.age = age; //明确表示为类中的age属性赋值
}
public String getInfo(){
return "姓名:" + name + " 年龄:" + age;
}
}
public class ThisDemo01{
public static void main(String args[]){
Person per1 = new Person("Jerry", 30);
System.out.println(per1.getInfo());
}
}
例2:如果一个类中有多个构造方法,可以利用this关键字相互调用
class Person{
private String name;
private int age;
public Person(){ //无参构造
System.out.println("一个新的Person对象被实例化。");
}
public Person(String name, int age){
this(); //调用Person类中的无参构造方法
this.name = name; //明确表示为类中的name属性赋值
this.age = age; //明确表示为类中的age属性赋值
// this(); //错误的调用只能放在构造方法首行
}
public String getInfo(){
return "姓名:" + name + " 年龄:" + age;
}
}
public class ThisDemo03{
public static void main(String args[]){
Person per1 = new Person("Jerry", 30);
System.out.println(per1.getInfo());
}
}
例3:this表示当前对象。指当前正在调用类中的方法的对象
class Person{
public String getInfo(){
System.out.println("Person类 --> " +this); //直接打印this
return null; //此处返回null,为的是让语法不出错
}
}
public class ThisDemo06{
public static void main(String args[]){
Person per1 = new Person();
Person per2 = new Person();
System.out.println("MAIN方法 --> " + per1); //直接打印对象
per1.getInfo();
System.out.println("------------------------");
System.out.println("MAIN方法 --> " + per2);
per2.getInfo();
}
}
//哪个对象调用了类中的方法,则this就表示哪个对象
`this()表示调用了无参的构造方法,如果需要调用指定的构造函数在括号加入相对应的参数。
注意:
·使用this()关键字调用构造方法的时候,必须放在构造方法首行。
·使用this()调用本类中其他构造的时候,至少有一个构造方法是不用this()调用的。
·this表示当前调用方法的对象。
二、 super 关键字 : super表示对父类对象的引用
super()用来调用父类中指定的构造方法,当使用super()关键字调用父类中的构造方法时,则java在子类实例化过程中不会自动调用父类中默认构造方法。
public class Child extends Parent{
public Child(){
super(1); //更改java默认规则,不调用默认无参构造
System.out.println("child");
}
public static void main(String args[]){
Child child = new Child();
}
}
class Parent{
public Parent(int i){
System.out.println("parent");
}
}
三、构造方法
· 当new() 一个类时,会首先调用构造方法。
· 如果父类提供了带参数的构造方法(无默认构造方法),则子类必须提供带参数的构造方法。因为子类实例化之前会先去调用父类的构造方法。