this关键字
1.”this.(方法名,属性名)”表示引用当前对象的方法或属性。
(1).给属性赋初始值时,一般要用this.xxx=xxx;
(2).当方法内部定义的局部变量与成员变量重名时,如果要调用成员变量应当使用this.xxx。如果没有重名,this可以省略。
(3)。可以使用this.(方法名)调用当前对象的方法,可以省略。
2.”this(参数)”表示调用本类的其它构造方法,根据所传参数来决定要调用那种构造器。只能出现在构造方法的第一行。
package TestSuperAndThis;
public class Pet {
public String name;//宠物名字
public int age;//宠物年龄
public double weight;//宠物体重
public Pet() {
super();
System.out.println("这是pet的空构造器");
}
public Pet(String name,int age,double weight) {
this();//调用pet的空构造器
this.name = name;
this.age = age;
this.weight = weight;
System.out.println("这是pet含有name,age,weight的构造器");
}
public void show() {
System.out.println("我是"+name+" 已经"+age+"岁了"+"我的体重为"+weight);
}
public void eat() {
this.show();//调用show方法,this可省略。
System.out.println("吃吃吃");
}
public static void main(String[] args) {
Pet pet=new Pet("小猫",3,5)
pet.eat();
}
}
super关键字要在子类中使用
1.super.xxx用在子类中,表示调用父类同名的方法或属性。
2.super(有参数或无参数),表示调用此类中的父类构造方法,只能出现在构造方法的第一行。
*应注意的是:在同一个构造方法中,this(有参数或无参数)和super(有参数或无参数)只能出现一个。任何子类构造方法的第一行一定是super(有参数或无参数)或this(有参数或无参数)这样的调用,如果没有显性写出来,则系统会默认添加super()的调用,表示调用父类中无参的构造方法。
package TestSuperAndThis;
public class Dog extends Pet {
public double run;//子类Dog的属性
public Dog() {
super();
System.out.println("这是子类的空构造器");
}
public Dog(String name,int age,double weight,double run) {
super(name,age,weight);//调用父类的非空构造器
this.run=run;
System.out.println("这是子类含有name,age,weight,run的构造器");
}
@Override//注解,用来确定重写父类的方法是否重写成功
public void eat() {
this.show();
super.eat();//调用父类的eat方法
System.out.println("我爱吃骨头");
}
public static void main(String[] args) {
Dog dog=new Dog("小泰迪",3,20,20);
dog.eat();
}
}
*从以上两端代码可以看出,在调用构造器时,一定会先调用其父类的构造器