关于super()的问题

natulist 2008-04-18 08:52:56
public class MainFrame extends Frame {
public MainFrame() {
super();
initialize();
}

private void initialize() {
this.setLayout(null);
this.setTitle("主界面");
this.setBackground(new Color(255, 204, 204));
this.setBounds(new Rectangle(200, 200, 400, 300));
}
}
我看别人的程序有调用super(),不用super()程序结果也一样啊,请问这里的super()是否一定要,有什么用?
...全文
332 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlss_17 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 anqini 的回复:]
因为你的构造方法是默认的构造方法,所以假如你继承A类,但在构造方法里没有显示的调用A类的构造方法,也就是说super(),那么会给你隐式的调用A类的构造方法!

但是前提条件是基类有无参构造方法!
[/Quote]
qq278095755 2008-04-29
  • 打赏
  • 举报
回复
如果,父类的构造方法是缺省的,在子类的构造方法里,你可以super(),如果不调用,就会隐式的调用,但前提是子类必须有一个缺省的构造方法.
如果想调用父类不是缺省的构造方法,就必须用super显示的调用了.
woshizn 2008-04-28
  • 打赏
  • 举报
回复

super是父类的构造函数。。

可以通过super.*调用父类的方法。。。
zhang88187 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 anqini 的回复:]
因为你的构造方法是默认的构造方法,所以假如你继承A类,但在构造方法里没有显示的调用A类的构造方法,也就是说super(),那么会给你隐式的调用A类的构造方法!

但是前提条件是基类有无参构造方法!
[/Quote]

恩,正解.父类是一定要初始化的,如果不显式地调用,就调用默认的无参构造函数(如果有的话,没有就报错).
盒子danbo 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 jibumao 的回复:]
super()可以不要,也可以要...因为super()不要..JVM默认调用super()构造方法
[/Quote]
SuperZXT 2008-04-28
  • 打赏
  • 举报
回复
默认的吧
jibumao 2008-04-28
  • 打赏
  • 举报
回复
super()可以不要,也可以要...因为super()不要..JVM默认调用super()构造方法
mike123hl 2008-04-25
  • 打赏
  • 举报
回复
自动调用
joejoe1991 2008-04-25
  • 打赏
  • 举报
回复
父类有 无参数的构造方法的话,你写不写都一样,
guoxiaopeng1982 2008-04-25
  • 打赏
  • 举报
回复
ddddddddddddddddddddddddddddddddddddd
胡矣 2008-04-24
  • 打赏
  • 举报
回复
super(); 在没有参数的情况下,程序会自己调用。写不写都行的 。
如果有参数的话拿就得写了
J寻 2008-04-24
  • 打赏
  • 举报
回复
说的已经狠清楚了
xiaofan1829 2008-04-24
  • 打赏
  • 举报
回复
对于class MainFrame是Frame类的子类,在执行子类对象的方法时,要么继承父类的方法,要么重新定义个自己的方法函数,对于super()是调用了父类的无参构造方法,所以在这里是必须的,当然虽然结果一样,但是如果没有写super(),系统还是默认的的先执行父类的无参构造方法,再执行其它的对象方法。
goosman 2008-04-21
  • 打赏
  • 举报
回复
学习了,用到了就调用,没有用到就不用显式调用了,不过推荐调用,为了函数的可读性。
caven110 2008-04-21
  • 打赏
  • 举报
回复
做几个父类子类的题目就知道了
jibumao 2008-04-21
  • 打赏
  • 举报
回复
super()是调用父类的构造方法啊..默认jvm自动帮我调用super()无参的构造方法
agate1573 2008-04-20
  • 打赏
  • 举报
回复
你这里可以不用super()
你这里的super()实际就是Frame.super()。
而你在下面并没有对这个方法有重写。
这种情况下,会默认调用。
aduan668 2008-04-20
  • 打赏
  • 举报
回复
如果你在代码里没有显式地调用super(),java虚拟机都会自动地调用super();
所以在Frame类中必须得有一个无参的构造器Frame(){}
锄头杨 2008-04-20
  • 打赏
  • 举报
回复
你的这个程序可以不写super方法,可在继承父类的方法时,它还是很好用的 啊
薛定谔之死猫 2008-04-19
  • 打赏
  • 举报
回复
这里不用像父类的构造方法传递参数,所以使用super(),在这种情况下是可以省略的,它会自动去调用父类的无参数构造方法,有参数的情况就不一样的,或许别人是追求代码风格的一致,大可不必理会它
加载更多回复(14)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧