java 如何在继承父类时在子类中设置值

nwsw7zdq  于 2023-09-29  发布在  Java
关注(0)|答案(2)|浏览(80)

我有两个班:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ClassA {
    private Integer id;
    private String created_at;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ClassB extends ClassA {
    private Boolean yesNo;
    private Commit commit;
}

我希望ClassB拥有来自CLassA的所有字段。现在我启动一个ClassB并尝试为其赋值:

ClassB classB = new ClassB();
classB.setCreated_at("01/01/2023");
System.out.println(classB);

但是B类中没有created_at值,为什么?如何在classB中设置created_at而不重新定义所有ClassA字段?

ryoqjall

ryoqjall1#

@Data
@ToString(callSuper = true)  // default implementation in @Data does not do this
@AllArgsConstructor
@NoArgsConstructor
public static class ClassB extends ClassA {

    private Boolean yesNo;
    private String commit;

}
nfs0ujit

nfs0ujit2#

必须使用protected定义ClassA的字段。所以它们将在子类B中继承。你也可以使用@Setter注解来定义setter方法,或者自己手动定义它们。如果你也需要getter方法,你应该使用@Getter注解。

@Data
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
public class ClassA {
    protected Integer id;
    protected String created_at;
}

相关问题