在Java中,this和super关键字比较常用,这两个关键字有许多共通的地方。this指的是当前对象,super指的是父类对象。
this和super分别有两种用途,
this的一种用途是引用当前对象的属性或方法;另一种是调用该类的其他构造方法。
super的一种用途是引用父类的属性或方法;另一种是调用父类的构造方法。
需要注意的是:static修饰的方法是没有this属性的,因为此类方法是属于类的不属于某一个对象
this使用:
1、this用于引用当前对象的属性或方法。例如:
public class PersonDemo {
public static void main(String[] args) {}
}
class Person {
private String personName = "";
public void setPersonName(String personName) {
//this引用当前对象的属性(当形参和属性personName名字相同时,不可省略this)
this.personName = personName;
}
public void printPersonInfo() {
//this引用当前对象的方法(this可省略)
System.out.println(this.toString());
}
public String toString() {
//this引用当前对象的属性(this可省略)
return "人员姓名:"+this.personName;
}
}
2、this调用该类的其他构造方法。
(1)this不能在构造方法中调用自己,否则会进入死循环,但可以调用其他的构造方法,
(2)this在调用其他构造方法时,只能为第一行语句
(3)调用其他构造方法时只能使用this调用,不能使用方法名调用
public class PersonDemo {
public static void main(String[] args) {}
}
class Person {
private String personName = "";
private int age;
public Person() {
//this调用该类的其他构造方法(必须为第一行语句)
this("张三", 22);
System.out.println("无参构造方法");
}
public Person(String personName, int age) {
//this("王五", 23); //不能在构造方法中自己调用自己,否则会进入死循环
this.personName = personName;
this.age = age;
}
}
super使用
1、super调用父类其他方法
public class PersonDemo {
public static void main(String[] args) {}
}
class Person {
private String personName = "李四";
public String toString() {
return "姓名:"+personName;
}
}
class Manager extends Person {
private String level = "总经理";
public String toString() {
//super调用父类方法
return super.toString()+";职位:"+level;
}
}
2、super调用父类构造方法
(1)如果父类有无参的构造方法时,在子类中调用此无参构造方法时,可省略super();
(2)在调用父类构造方法时,此调用语句只能为第一行语句
public class PersonDemo {
public static void main(String[] args) {}
}
class Person {
private String personName = "";
public Person(){}
public Person(String personName) {
this.personName = personName;
}
}
class Manager extends Person {
private String level = "";
public Manager() {
//super();//如果父类有无参构造方法,则此处调用父类无参构造方法时可省略;如果没有,则需要显式调用父类其他构造方法
}
public Manager(String level) {
/* 调用父类构造方法时必须为第一行语句;
* 此处如果省略,则默认调用的是父类的无参构造方法,如果父类没有无参构造方法,则需要显式调用父类其他构造方法
*/
super("王五");
this.level = level;
}
}
原文:https://blog.csdn.net/lanmuhhh2015/article/details/79030784
版权声明:本文为博主原创文章,转载请附上博文链接!