在学习super关键字之前,我们需要注意的一点就是,super关键字的学习需要和this关键字类比起来学,它们之间有许多共同点,下面我们就来进入正式的讲解吧。
我们还是以一段代码开篇讲解吧:
class Test{
public Test(){
System.out.println("父类的构造方法被执行!");
}
}
public class Test02 extends Test{
public Test02(){
System.out.println("子类的构造方法被执行!");
}
public static void main(String[] args){
Test02 test02 = new Test02();
}
}
运行结果如图所示:
由图可知,并没有某个语句来调用父类的构造方法,但是由运行结果可以得到,父类的构造方法一定是执行了,那么由Java语言的“尿性”可以知道,肯定又有某个地方的代码语句被隐藏掉了。在查阅了相关资料之后,这个疑问就可以解决掉了。当一个构造方法的第一行既没有this()又没有super()的话,默认会有一个super();语句,表示通过当前子类的构造方法去调用父类的无参构造方法。也就是说,上面那段代码写具体的话应该是这样的:
class Test{
public Test(){
super();
System.out.println("父类的构造方法被执行!");
}
}
public class Test02 extends Test{
public Test02(){
super();
System.out.println("子类的构造方法被执行!");
}
public static void main(String[] args){
Test02 test02 = new Test02();
}
}
关于super关键字我们需要掌握的内容是:
- super是一个关键字,并不是一个引用,也不指向任何对象;
- super只代表当前对象内部的那一块父类型特征;
- super关键字可以出现在实例方法和构造方法当中;
- super的语法有:super. 和 super();
- super.在大部分情况下是可以省略的,如果父类和子类当中有同名属性,想在子类当中访问父类的属性,这种情况下不能省略;
- super()只能出现在构造方法非注释语句的第一行;
- super()通过当前的构造方法去调用父类中的构造方法,目的是在创建子类对象的时候,先初始化父类型特征。
super()表示通过子类的构造方法调用父类的构造方法,我们可以模拟一种现实世界的场景来理解它,也即要想有儿子,必须要先有父亲。当一个构造方法的第一行既没有this();又没有super();的话,默认有一个super();表示通过当前子类的构造方法调用父类的无参构造方法,所以说必须保证父类的无参数构造方法是存在的。
Tips:this()和super()不能共存,它们都是只能出现在构造方法第一行,无论怎样折腾,父类的无参构造方法是一定会执行的。
由此我们可以总结出一般性的结论:在Java语言当中,不管是new什么对象,最后Object类中的无参构造方法是一定会执行的。
Java是怎么来区分子类和父类的同名属性???
this.name表示当前对象的name属性;
super.name表示当前对象的父类型特征中的name属性。
本期博文你需要思考的问题是:
分析以下代码的运行结果:
class A{
public A(){
System.out.println("1");
}
}
class B extends A{
public B(){
System.out.println("2");
}
public B(String name){
System.out.println("3");
}
}
class C extends B{
public C(){
this("张三");
System.out.println("4");
}
public C(String name){
this(name,20);
System.out.println("5");
}
public C(String name,int age){
super(name);
System.out.println("6");
}
}
public class Test02{
public static void main(String[] args){
C c = new C();
}
}
Tips:解答如下
主函数当中通过调用C类的无参构造方法new一个C类对象,后面根据每个构造方法当中的语句来执行即可,需要注意的一个陷阱就是B类的有参构造方法的第一行默认省略了super();语句。
执行结果为:
1
3
6
5
4
以上内容均为个人学习的一点心得,其中的知识点若有错误请留言提醒,若有侵权内容提醒马上删除。