我想为属性定义一个具有标准化名称的抽象属性类。这样,所有继承的属性都将声明具有相同名称模式的属性。
在一个子类上,我希望能够在其中一些属性上添加 javax.validation.notNull 注释。
可能吗 ?我看到有一个用于覆盖超类型注释的开放票,这意味着无法覆盖它们,但在这里我想添加注释。
我想为属性定义一个具有标准化名称的抽象属性类。这样,所有继承的属性都将声明具有相同名称模式的属性。
在一个子类上,我希望能够在其中一些属性上添加 javax.validation.notNull 注释。
可能吗 ?我看到有一个用于覆盖超类型注释的开放票,这意味着无法覆盖它们,但在这里我想添加注释。
是的,这是可能的。您只需要覆盖超类中的方法并在子类中添加所需的注释即可。
回答您的评论
编辑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() 时所示。
此外,AFAIK,如果在变量或 getter 上定义的注释,验证应该是一样的。
就像旁注一样。“覆盖”静态方法会产生与“覆盖”变量相同的(错误)行为,因此也不鼓励使用。