想问一下,构造器里面有String msg
然后下面调用父类的方法为什么又有一个msg,没太看明白,求解答。
public class AgeExpection extends RuntimeException {
public AgeExpection(String msg) {
super(msg);
}
}
希望有人能帮忙解释清楚一下
String msg是AgeExpection 类的有参构造函数的形参
super(msg);是一个函数调用,把msg当做实参传递给super执行
super是父类的实例,就类似this指向自身类的实例
那么super()就是父类的构造函数
public AgeExpection(String msg) {
这里的msg是函数参数定义,注意,这里是函数定义!!
super(msg); 这是调用基类构造函数,同时将参数msg传递给基类构造函数,注意,这里是函数调用!!!
AgeExpection是RuntimeException 类的子类,其构造函数要求传递一个String类型的参数msg,实际上基类也有相同的构造函数,所以子类直接把外部传递给它的参数msg传递给了基类构造函数,实现对象构造
RuntimeException 里面也有一个构造函数 这并不冲突吧
就是在抛出AgeException时,因为传参数到了父类 RuntimeException一个有String参数的构造器中,所以可以打印异常信息时,会把msg字符串的信息打印出来。测试代码如下:
public class AgeException extends RuntimeException {
public AgeException (String msg) {
super(msg);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student(121);
}
}
class Student{
int age;
public Student(int age) {
if(age>120) {
throw new AgeException("年龄不能超过120岁!");
}else {
this.age = age;
}
}
}