this关键字与super关键字的作用
1、调用父类或子类的属性
当一个类继承父类后,若父类与子类有相同的属性,使用”this.属性名“可以访问子类属性,使用“super.属性名”可以访问父类属性。代码如下
public class demo {
public static void main(String[] args) {
Person1 p1=new Person1();
p1.print();//输出结果为abc
p1.print2();//输出结果为a
}
}
class Person1 extends Person2{
static String name="abc";
public void print() {
System.out.println(this.name);
}
public void print2() {
System.out.println(super.name);
}
}
class Person2{
static String name="a";
}
2、调用父类或子类的方法
同理, 当一个类继承父类后,若父类与子类有相同方法名的方法,使用”this.方法名“可以访问子类方法,使用“super.方法名”可以访问父类方法。代码如下
public class demo {
public static void main(String[] args) {
Person1 p1=new Person1();
p1.test1();//输出结果为person1
p1.test2();//输出结果为person2
}
}
class Person1 extends Person2{
public void print3() {
System.out.println("Person1");
}
public void test1() {
this.print3();
}
public void test2() {
super.print3();
}
}
class Person2{
public void print3() {
System.out.println("Person2");
}
}
3、调用父类或子类的构造方法
若不使用super();或this();语句,子类默认使用父类的构造方法,即子类构造方法中的super();语句默认存在,若使用this();必须是调用子类中其他类型的构造方法,代码如下
public class demo {
public static void main(String[] args) {
Person1 p1=new Person1();
}
}
class Person1 extends Person2{
public Person1() {
//若构造方法不写,默认使用父类的构造方法
//super();//调用父类构造方法,必须写在子类的第一行,否则会报错。
this("b");//调用子类的其他构造方法,同样要写在构造方法的第一行。
System.out.println("Person1无参构造执行");
}
public Person1(String name) {
System.out.println("Person1无参构造执行");
}
}
class Person2{
public Person2() {
System.out.println("Person2无参构造执行");
}
}
执行结果如下:
Person2无参构造执行
Person1无参构造执行
Person1无参构造执行
注意:super();语句和this();语句不可同时出现,因为构造方法中默认有super();语句。