Java中的super和this关键字——
super与this关键字
先总结再解释:
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
super注意点:
1.super调用父类的构造方法,必须在构造方法的第一行
2.super必须只能出现在子类的方法或者构造方法中!
3.super和this不能同时调用构造方法!
VS this:
代表的对象不同:
this:代表本身调用者这个对象
super:代表父类对象的引用
前提:
this:没有继承也可以使用
super:只能在继承条件下才可以使用
构造方法的区别:
this();本类的构造
super();父类的构造
穿插一点继承里的东西:
子类对象在实例化时会默认先去调用父类中的无参构造方法,之后再调用本类中的相应构造方法。
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带参,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。(可参考最后一条规则示例:)
如果父类构造器无参,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
如下:
//父类:
package com.oop.Test05;
public class Person{
//父类的无参构造
public Person() {
System.out.println("父类无参构造执行了");
}
}
//子类:
package com.oop.Test05;
public class Student extends Person{
//子类的无参构造
public Student() {
//super();可显式可隐藏,若显式,则必须放在第一行
System.out.println("子类的无参构造执行了");
}
}
//测试类:
package com.oop;
import com.oop.Test05.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
}
}
输出:
父类无参构造执行了
子类的无参构造执行了
继承条件下构造方法调用规则如下:
1.子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,super()语句有没有都一样;
但是注意:若父类显式定义了有参构造方法,但未显式定义无参构造,此时父类中的无参构造方法就被干掉了,此时既无法使用super();
语句调用父类的无参构造,同时子类也无法定义自己的无参构造。在这种情况下,super();
语句,写了也没用,编译器报错,代码无法通过。不过我们只是无法调用无参,但是可以调用父类的有参构造。
可以通过下面的方法调用:(可参考最后一条规则示例:)
super(参数);
//参数列表匹配对应的有参构造
2.如果子类的构造方法中通过super显式调用父类的有参构造方法,此时父类无参构造方法不会被执行。
如下:
//父类:
package com.oop.Test05;
public class Person{
//父类的无参构造
public Person() {
System.out.println("父类无参构造执行了");
}
//父类的有参构造
public Person(String name) {
System.out.println("父类有参构造执行了");
}
}
//子类:
package com.oop.Test05;
public class Student extends Person{
//子类的无参构造
public Student() {
super("樱");
System.out.println("子类的无参构造执行了");
}
}
//测试类:
package com.oop;
import com.oop.Test05.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
}
}
输出:
樱
父类有参构造执行了
子类的无参构造执行了
3.如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应满足:this语句放在第一行。
本文来自博客园,作者:柔小兔,转载请注明原文链接:https://www.cnblogs.com/whitebunny/p/16121496.html