Java学习日记1—this与super的区别
首先super是用于继承的,继承父类的属性和方法,那就详细说一下super的用法,先贴一个代码
public class Person {
/*
* 设定属性
*/
private String name;
private int age;
/*
* constructor
*/
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
/*
* getter/setter
*/
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
/*
* methods
*/
public void sayHello() {
System.out.println("我是" + this.name + "我今年" + this.age + "岁了");
}
}
这是父类Person的代码
public class Student extends Person {
public Student() {
super("huBaYi", 18);
this.sayHello();
System.out.println(this.getName());
}
}
这是子类Student的代码,这里super可以不写,这样java就会默认调用super(),而这个super()是会调用父类的无参构造也就是父类代码中的Person(),这样this.sayHello()执行结果就是“我是null,我今年0岁”,因为父类属性是在有参构造中赋值的,所以这里就要传入相应的参数,总之,super()是会调用父类的构造函数,this同理,只不过this()是调用自身的构造函数
再说下一个,我在子类Student里用了this.sayHello()方法,这本是父类的方法,由于继承,子类Student也可以使用,但如果子类自身还有sayHelllo()方法,那this.sayHello()就指向自身的sayHello,那如果我还想指向父类的sayHello怎么办?那这个时候就可以写成super.sayHello()
super.sayHello();
这样就可以指向父类的方法了
再添一嘴,不论是super()还是this()在构造中必须写在第一行,也就是说,你手动写了super(),就不能再写this(),反之亦然
对了,我是“我叫胡八一”,从前端慢慢转型后端的码农,对IT感兴趣的可以加我
QQ:1627889159