我想用属性的标准化名称定义一个抽象属性类。这样,所有继承的属性都将使用相同的名称模式声明属性。
在子类上,我希望能够在其中某些属性上添加javax.validation.notNull注释。
有可能吗? 我看到有an open ticket用于覆盖超类型注释,这意味着无法覆盖它们,但是在这里我想添加注释。
答案 0 :(得分:1)
是的,这是可能的。您只需要重写超类中的方法,并在子类中添加所需的注释即可。
回答您的评论
编辑1:
是的,我的意思是覆盖吸气剂。我会强烈推荐反对 在父类和子类中定义相同的变量。我认为访问父类中定义的变量会违反封装。除此之外,您可能会遇到各种麻烦,因为这些变量实际上不被覆盖。考虑下面的基类
public class Base {
public int ggg;
public void test() {
System.out.println("Base test was called");
}
}
和儿童班
public class Child extends Base {
public int ggg;
public void test() {
System.out.println("Child test was called");
}
}
在以下测试类中运行main()
public class Test {
public static void main(String[] args) {
Base base = new Child();
base.ggg = 5;
System.out.println(base.ggg);
System.out.println(((Child) base).ggg);
base.test();
((Child) base).test();
}
}
您将获得以下输出
5
0
子测验被称为
子测验被称为
变量ggg存在两次,一次在子类中,一次在超类中。根据访问对象的方式,可以访问其中之一。如调用test()所示,使用适当重写的方法不会发生这种情况。
此外,如果在变量或getter上定义的注释,则AFAIK的验证也应相同。
请注意。 “覆盖”静态方法产生与“覆盖”变量相同的(错误)行为,因此不建议使用。