this关键字
-
this可以用来修饰属性名、方法和构造器
-
this修饰属性和方法
a)this代表当前对象。解决方法的形参和属性重名的问题。
b)在构造器中时,this代表当前构造的对象。 -
this修饰构造器
a)在类的构造器中,可以显示的使用this(形参列表)调用本类中指定的其他构造器
b)构造器中不可以使用this调用自己
c)如果有n个构造器,最多可以有n-1个构造器使用this();
d)*构造器this必须放在构造器的首行
e)一个构造器中最多可以使用一个this(形参)
//对象比较大小
public int compare(Girl girl){
return this.age- girl.age; //如果是负数,代表当前对象小,大于0则表示当前对象大
}
super关键字
- super可以调用:属性、方法、构造器
- 在子类和父类有相同的属性和方法时,想在子类的方法或构造器中使用父类的方法和属性时需要通过super来决定调用父类的属性和方法,否则默认为this。
- 如果子类中没有和父类相同的属性和方法时,super可以不写。
- super()的使用,必须声明在构造器的首行。(与this矛盾,只能写一个)
- 如果两个都不写,在子类的构造器中默认调用的是super()
/**
* @ClassName KeyWord
* @Description TODO
* @Author 王琛
* @Date 2019/8/20 20:53
* @Version 1.0
*/
public class KeyWord {
public int id;
public String name;
public int age;
public KeyWord(){
System.out.println("父类构造器");
}
public void printInfo(){
this.name = "zhangsan";
this.age = 29;
this.id = 1;
}
public static void main(String[] args) {
SubKey subKey =new SubKey();
subKey.printInfo(); //交换这两行会出现不同的输出
subKey.printInfo1(); //这行会给父类的id赋值。
}
}
class SubKey extends KeyWord{
private String sex;
private int id;
public SubKey(){
System.out.println("子类构造器");
} //默认调用父类的构造器,super();
public void printInfo1(){
super.printInfo();
name = "zhangsan";
age = 29;
id = 3;
sex ="男";
System.out.println("name:"+name+" ;age:"+age+" ;id:"+id+" ;sex:"+sex);
}
public void printInfo(){
name = "zhangsan";
age = 29;
id = 3;
System.out.println("name:"+name+" ;age:"+age+" ;id:"+id+" ;id:"+super.id); //获取不到父类的私有属性的值
}
}
交换后