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
}
}
因为super()是Exception的Constructor(构建器),所以只能在子类Constructor的第一句调用。
方法里也需要构造函数的么?
谢谢,明白了。
如果不是构造方法就不能用super(),第一个test不是构造方法,第二个错误是在main方法里面,也不是构造方法。
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()”,是吧?
用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"); }
还是不懂? 我放弃了
super()不是普通的方法,它是Exception的构造方法,所以不能在非子类构造方法中使用。你如果想在test中用super关键字,就用super.aMethod()。下面也是一样的道理。
那这个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
}
不要在test()里面用super(),视频里面是两个构造方法(Constructor),所以可以在第一排用
具体怎么改?