为了账号安全,请及时绑定邮箱和手机立即绑定

创建引用父类Exception,为什么是错的

package com.Imooc.test;


public class DrunkException extends Exception {//创建一个自定义的异常处理类,引用Exception为父类

public DrunkException(){//创建一个无参的构造方法

}

    public DrunkException(String message){//创建一个有参的构造方法

    super(message);//引用父类的super方法

}

  public String test (String message){//创建一个有参的方法

    super(message);//引用父类的super方法,这一行有错误:Constructor call must be the first statement in a constructor

}

public static void main(String[] args) {

DrunkException DEx=new DrunkException();

DEx.super();//这一行有错误:Constructor call must be the first statement in a constructor

}

}


正在回答

11 回答

因为super()是Exception的Constructor(构建器),所以只能在子类Constructor的第一句调用。


0 回复 有任何疑惑可以回复我~

方法里也需要构造函数的么?

0 回复 有任何疑惑可以回复我~

谢谢,明白了。

0 回复 有任何疑惑可以回复我~

如果不是构造方法就不能用super(),第一个test不是构造方法,第二个错误是在main方法里面,也不是构造方法。

0 回复 有任何疑惑可以回复我~

public static void main(String[] args) {

DrunkException DEx=new DrunkException();

DEx.super();//这一行有错误:Constructor call must be the first statement in a constructor

}//那就是说这一行其实是多余的,因为“DrunkException DEx=new DrunkException();”这一句其实就调用 了父类的super方法,所以不需要再“DEx.super()”,是吧?



0 回复 有任何疑惑可以回复我~

用super关键字的时候一般是想Override父类的方法。比如如果你父类也有个test(String message)

void test(String message) {
    System.out.println(message);
}

那么你想在子类里面重写(Override)这个test方法,给其增加一些其它功能同时不重复写代码(reduce duplication),那么就可以用super关键字

@Override
void test(String message) {
    super.test(message);
    System.out.println("test has been overriden");
}


0 回复 有任何疑惑可以回复我~
#1

慕仙7584962 提问者

我父类里没有这个"test(String message)",而我只是想在本类里加一个public String test (String message),这个方法的实际作用就是想调用父类的super()方法,是不是这个想法不合实际?就是说用无参或是有参的构造方法就可以实现调用父类的super()方法,所以根本没有必要额外再加一个test()方法去复用父类的super?
2019-08-22 回复 有任何疑惑可以回复我~

还是不懂? 我放弃了

1 回复 有任何疑惑可以回复我~

super()不是普通的方法,它是Exception的构造方法,所以不能在非子类构造方法中使用。你如果想在test中用super关键字,就用super.aMethod()。下面也是一样的道理。

0 回复 有任何疑惑可以回复我~
#1

慕仙7584962 提问者

另外请教一下,这个super.aMethod()是什么意思,我百度仁波切都没有结果呢
2019-08-22 回复 有任何疑惑可以回复我~

那这个test要如何写?

就是我这个test方法是想用来调用Exception父类的super方法,要如何写?

另外为什么这样写也有错:

public static void main(String[] args) {

DrunkException DEx=new DrunkException();

DEx.super();//这一行有错误:Constructor call must be the first statement in a constructor

}


0 回复 有任何疑惑可以回复我~

不要在test()里面用super(),视频里面是两个构造方法(Constructor),所以可以在第一排用

0 回复 有任何疑惑可以回复我~
首页上一页12下一页尾页

举报

0/150
提交
取消

创建引用父类Exception,为什么是错的

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信