Java中this和super关键字的用法

在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
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/wcc178399/article/details/84476573