关于super的几点疑问

关于super的几点疑问

老师,我的问题是:1、super可以调用父类构造方法,为什么不是写成:super.Animal(name,month);。而是写成super(name,month);

2、super调用父类方法,得写在子类构造方法的方法体内第一行,那为什么不能在普通的子类方法里,使用super调用父类方法?

3、使用super(name,month)调用父类带参构造方法,这我理解。但是,super(name,month)是写在方法体里的,在子类构造方法还没有追溯自己的父类构造方法前,怎么能进入方法体内读取其中的代码呢?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,在java的继承类关系中,子类的构造方法,如果没有写super();编译时会自动添加super(),如果在构造方法中写了super(),但是没有放在构造方法中的第一行,程序会编译不通过,强制执行程序会报错。所以在子类的构造方法中没有写super();,他会默认给你加,如果你写了,就必须放到构造方法的第一行!

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


好帮手慕阿满 2019-04-29 17:20:56

同学你好,对同学的问题回答如下:

1、在子类的普通方法中,不可以使用super调用父类的构造方法。

2、同学的第2条理解似乎有些问题,在子类的构造方法中使用super()调用父类的构造方法,该代码必须放在子类构造方法的第一行,在执行子类构造方法时,首先执行第一行super(),这时才去调用父类的构造方法,也就是说执行super()表示执行父类的构造方法。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    那如果没有在子类构造方法里的第一行写super(),子类构造方法还会不会执行方法体内第一行的代码,哪怕第一行不是super()?
    2019-04-30 14:06:41
吃吃吃鱼的猫 2019-04-28 19:05:01

同学你好,

  1. super关键字调用父类中的构造函数的语法格式为:super(参数),没有super.类名(参数);的这种写法。

  2. super可以写在普通的子类方法里,调用父类的方法。如:super.getName();

  3. 同学的意思是在子类方法体内如何判别调用了哪个父类的构造方法吗?如果是的话,通过super中的参数类型和个数来判断调用了父类的哪一个带参构造方法。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,经过你的回答,我还有两点疑问:1、在子类普通方法里,可以使用super调用父类构造方法吗? 2、老师误解我之前提出的第三个问题,我的意思是子类构造方法得先追溯父类构造方法,追溯完毕后才能进入自己的方法体里执行代码,这时才会执行super()。 但是,在子类构造方法还没有追溯自己的父类构造方法前,怎么能进入方法体内读取其中的代码super()呢?
    2019-04-29 11:04:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师