java——this关键字与super关键字

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();语句。

你可能感兴趣的:(java——this关键字与super关键字)