Java语言中,this用来指向当前实例对象,他的一个非常重要的作用就是用来区分对象的成员变量和方法的形参。(当一个方法的形参和成员变量的名称相同时,就会覆盖成员变量)。
例如:
public class Animal {
String name;
//正确写法
public Animal(String name){
this.name = name;
}
//错误写法
/*public Animal(String name){
name= name;
}*/
}
上例中,第一个构造函数使用this.name表示左边的值为成员变量,而不是这个构造函数的形参。对于第二个构造函数,由于在这个函数中形参和成员变量有着相同的名称,因此对于语句name = name ,等号左边和右边的两个name代表的都是形式参数,在这种情况下,只能通过this才能访问到成员变量。
super 可以用来访问父类的方法或者成员变量。当子类的方法或者成员变量和父类有相同的名字的时候也会覆盖父类的方法或者成员变量,要想访问父类的方法和成员变量只能通过super关键字来访问。
子类构造函数要显示调用父类的构造函数的时候,super()必须为构造函数中的第一条语句。
如下代码:
public class Animal {
public void say(){
System.out.println("say");
}
}
public class Dog extends Animal {
public void say(){
System.out.println("Dog wang wang");
}
public void dogSay(){
say();
}
public void animalSay(){
super.say();
}
public static void main(String[] args){
Dog dog = new Dog();
dog.say();
dog.animalSay();
}
}
运行结果如下:
Dog wang wang
say