先贴上部分源码:
public class MyFindDialog extends Dialog implements ActionListener
{
private Label lFind, lReplace;
private TextField tFind, tReplace;
private Button bFind, bReplace;
private TextArea ta;
public MyFindDialog()
{
/*
* 这里要调用一下父类的构造方法
* 原因个人觉得是:因为父类Dialog没有提供一个空的构造方法,
* 而编译器只可能帮我们自动调用那些空的构造方法(因为如果调用非空构造方法的话,编译器不知道为我们传什么参数)
* 所以我们只有在子类显示的调用这个方法。
*/
super(new Frame());
在没有super(new Frame());这行代码报错如下:
implicit super constructor Dialog() is undefined, must explicitly invoke another constructor.
这是在写java程序,用到了继承时遇到的一个问题,虽然英文比较容易懂,但是当时感觉自己挺笨的,竟然对这个问题没有什么解决办法。回去之后,心里还是对那个问题念念不忘。仔细分析这句错误提示发现了解决方法。
这句错误提示的中文意思是:不明确的父类构造方法Dialog()(这里是Dialog因为我是从这个类继承的),没有定义,请明确调用另一个构造方法。
解决方法是:我查看了API,Dialog没有这个Dialog()构造方法,虽然我们知道如果一个类没有提供构造方法时,才会自动的为我们提供一个空的构造方法,但是因为Dialog()有其他的构造方法,所以那个默认的空的构造方法就不存在了(除非你自己显示的提供了一个空的构造方法)。好了这就到了问题的关键,既然Dialog没有空的构造方法,而编译器只会为我们自动的调用参数列表为空的构造方法,那么在我的代码里面必然会报错。此时,需要我们显示的调用一下父类的构造方法,然后问题得到解决。
然后说点这个Dialog类没有空构造方法原因,因为Dialog必须依托于一个组件而存在,我们的构造方法必然要指定这个Dialog的父亲是谁,空的构造方法怎么去指定这个父亲组件呢?然后你知道答案了....
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25701553/viewspace-697932/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25701553/viewspace-697932/