前言
在JDK22
以前,在子类的构造函数中,如果显式调用父类的构造函数(通过super(...)),那么这条语句必须是构造函数中的第一条语句,但是在JDK22
之后,这个规则就彻底打破了,JDK22
预览了JEP 447新属性
super使用
在jdk22
以前,super
是这么用的
1、 定义一个父类
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
2、使用super
public class User extends Person {
public User() {
super();
System.out.println(12);
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
User user = new User();
user.setId(1L);
System.out.println(user);
}
}
如果这么写,会报错
public class User extends Person {
public User() {
System.out.println(12);
super();
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
User user = new User();
user.setId(1L);
System.out.println(user);
}
}
但是在jdk22
之后,允许这么写了,在super之前写语句
总结
虽然在jdk22
之后允许这么使用super
,但是该属性属于预览属性,并且在之后的JDK23
和JDK24
也属于预览属性,需要使用--enable-preview
开启预览属性