JDK22中的super

8 阅读1分钟

前言

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,但是该属性属于预览属性,并且在之后的JDK23JDK24也属于预览属性,需要使用--enable-preview开启预览属性