super关健字用法有以下两种:
1.操作被隐藏的成员变量和被重写的成员方法(所谓被隐藏的变量是指与子类变量名相同的父类变量) 如果想在子类中操作父类中被隐藏的成员变量和被重写的成员方法,也可以使用super关键字。 (调用父类变量、成员方法时super位置没有太多限制)
2.调用父类构造方法(重点)(调用父类构造器时super必须放在子类构造器里第一句)
从以上截图可以看出输出子类构造器时先输出父类构造器,这就涉及到调用父类构造器。若父类无构造器,则会默认一个无参构造器,而子类则会默认super()来调用父类无参方法,即子类创建构造器时,都会调用父类构造器。
那么,易错点来了,子类仅会以super()调用父类无参构造器,一旦父类定义一个有参构造器会发生什么呢?
子类直接报错,因为它无法调用父类构造器
以上两幅截图实质一样,可以看出报错了。系统还是默认super()去调用父类无参构造器,但此时父类已经没有无参构造器了。修改方法:在子类添加一个super(x)(x是与父类构造方法一致的变量)
当父类无参而子类有参时此时则无需加super(x)否则会报错,因为父类没有有参构造器所以子类无法调用。如图:
系统会默认super()去调用父类无参构造器。如图:
JAVA——super关健字用法(子类创建对象时的易错点)
最新推荐文章于 2023-03-25 10:57:19 发布