1.this指的是当前的类或调用改方法的对象
2.super指的是父类;常用于子类继承父类时,子类无参构造中调用父类无参构造的方式。
3.super(); 在子类继承父类的普通方法中,也指代继承父类所有的属性。
this用于构造方法的相互调用
- 创建一个定义类,含三个构造函数;用this()相互调用;指定this("","","")来选择优先执行那个。执行顺序和栈一样
package 继承;
public class Main {
String name;
String sex;
int age;
public Main() {
this("张三","男");
System.out.println("执行第一个无参构造");
}
public Main(String name,String sex) {
this("李四","男",15);
System.out.println("执行第二个无参构造");
}
public Main(String name,String sex,int age) {
System.out.println("执行第三个无参构造");
}
}
- 测试类
package 继承;
public class MainTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Main a=new Main();
}
}
- 结果
执行第三个无参构造
执行第二个无参构造
执行第一个无参构造
this用来指带当前的类或调用该方法的类
- 指代当前类
package 继承;
public class Main1 {
String name;
String sex;
int age;
public Main1(String name, String sex, int age) {
super();
this.name = name;//this指代的是当前类
this.sex = sex;
this.age = age;
}
}
- 指代调用方法的类或对象
-
这里用的是访问器来做例子
-
package 继承;
public class Main1 {
String name;
String sex;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
super用来调用父类的无参构造
- 此时父类必须有无参构造,否则子类在自己的无参构造调用父类会报错
package 继承;
public class Person {
public String name;
public String sex;
public Person(String a) {//只有有参构造
}
}
package 继承;
public class Student extends Person {
public Student() {
super();//会报错,除非在父类中加上无参构造
}
}
- 手动更改调用父类的有参构造
package 继承;
public class Student extends Person {
public Student() {
super("");//指定调用父类的有参构造,
}
}
- super(参数);参数应该是父类中的成员变量
package 继承;
public class Car extends Vehicles {
int seats;
public Car(String brand,String color,int seats) {
super(brand,color);//super中是父类的成员变量
this.seats=seats;
}
public void showCar() {
System.out.println("车标:"+brand+"\n颜色:"+color+"\n座位数:"+seats);
}
}
super用于调用继承父类的方法或属性 不对?
package 继承;
public class Car extends Vehicles {
int seats;
public Car(String brand,String color,int seats) {
super(brand,color);
this.seats=seats;
}
public void showCar() {
System.out.println("车标:"+super.brand+"\n颜色:"+super.color+"\n座位数:"+seats);//super用于代表属性 super.成员变量名
}
}