this和super的区别
用法
this :
- this()方法是调用本类的构造方法;
- this+成员变量,形参与成员名字重名,用this来区分(this.name = name;);
- this()方法是调用本类的构造方法 使用时要注意参数比构造函数参数少且只少一个。
看测试源码:(可以自己运行下面源码测试)
1.先创建一个测试类:
public class testThis {
String name;
int age;
public testThis() {
System.out.println("父类的无参构造方法");
}
public testThis(String name, int age) {
this.name = name;
this.age = age;
System.out.println("父类的有参构造方法");
}
}
2。再创建一个子类:
public class Person extends testThis {
/*this()方法是调用本类的构造方法
* 使用时要注意参数比构造函数参数少且只少一个
* */
public Person() {
System.out.println("子类的无参构造方法");
}
public Person(String name){
this();/*引用本类的无参构造方法*/
this.name=name;/*形参与成员名字重名,用this来区分*/
System.out.println("只有一个形参==>子类的有参构造方法");
}
public Person(String name, int age) {
this(name);/*引用本类的无参构造方法*/
this.name=name;/*形参与成员名字重名,用this来区分*/
this.age=age;/*形参与成员名字重名,用this来区分*/
System.out.println("两个形参==>子类的有参构造方法");
}
public static void main(String[] args) {
Person people1 = new Person("liu", 23);
System.out.println(people1);
Person people2 = new Person("liu");
System.out.println(people2);
}
}
super :
- super()方法是调用父类的构造方法。
其他super细节可以看下方源码(一些注意事项都在下方代码中):
先定义一个父类:
public class testSuper {
String name;
int age;
public testSuper() {
System.out.println("父类的无参构造方法");
}
public testSuper(String name){
System.out.println("只有一个形参==>父类的有参构造方法");
}
public testSuper(String name, int age) {
this.name = name;
this.age = age;
System.out.println("两个形参==>父类的有参构造方法");
}
}
再定义一个子类:
public class sun extends testSuper {
/*使用super()方法之后不会再默认调用父类的无参构造函数
* 使用super()方法,参数要与构造函数的参数相对应
* */
public sun() {
super();/*调用父类的无参构造函数*/
System.out.println("子类的无参构造方法");
}
public sun(String name){
super(name);/*调用父类中只有一个形参的有参构造函数*/
}
public sun(String name, int age) {
super(name, age);/*调用父类中两个形参的有参构造函数*/
}
public static void main(String[] args) {
sun sun1 = new sun();
System.out.println(sun1);
/*父类的无参构造方法
子类的无参构造方法*/
sun sun2 = new sun("liuyuxuan");
System.out.println(sun2);
/*只有一个形参==>父类的有参构造方法*/
sun sun3 = new sun("liuyuxuan", 23);
System.out.println(sun3);
/*两个形参==>父类的有参构造方法*/
}
}
运行过这几段代码之后应该会有体会this和super的区别!!!