Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何注释从抽象类派生的实例变量?_Java_Inheritance_Annotations - Fatal编程技术网

Java 如何注释从抽象类派生的实例变量?

Java 如何注释从抽象类派生的实例变量?,java,inheritance,annotations,Java,Inheritance,Annotations,我有以下抽象Java类: abstract class AbstractDto { String id; public void setId(String id) { this.id = id; } public String getId() {return id; } } 我还有一个扩展抽象类的类: class SomeDto extends AbstractDto { @SomeAnnotation String id; } 我想注释一个从抽象类派

我有以下抽象Java类:

abstract class AbstractDto {

  String id;

  public void setId(String id) { this.id = id; }    

  public String getId() {return id; }

}
我还有一个扩展抽象类的类:

class SomeDto extends AbstractDto {

  @SomeAnnotation
  String id;

}
我想注释一个从抽象类派生的实例变量。我不确定这是否是我所做的那样。我知道Java不提供变量重载,所以这是隐藏

那么,如果我这样做会发生什么:

public void go(AbstractDto dto) {
  println("dto.id: "+dto.id);
}

AbstractDto dto = new SomeDto();
dto.setId("1234");
go(dto);
由于我在将SomeDto的id设置为时进行了阴影处理,因此从AbstractDto继承了一个
id
变量,该变量仍然没有设置


如何注释抽象超类中定义的实例变量?

编辑:当我这样做时:

SomeDto dto = new SomeDto();
dto.setId("123");
哪个id设置为AbstractDto中的id还是SomeDto中的id?
如果抽象类中的方法从id中读取然后使用哪个id,会发生什么情况?

您提供的示例称为阴影,Java中的字段没有重写

有关阴影的更多信息,请参见:

在计算机编程中,当一个变量 在特定范围内声明(决策块、方法或内部 类)与外部作用域中声明的变量具有相同的名称

因此,要使用注释,您可以在抽象类中注释
id
变量(所有继承的类都可以使用该注释变量),或者只注释
SomeDto的
id
变量,但您必须知道它是一个新变量(与id的超类变量没有关系)

关于第二个问题:

哪个id设置为AbstractDto中的id还是SomeDto中的id

SomeDto的id将被设置,因为
dto
的参考变量类型是
SomeDto
。为了进一步解释,在继承的类
SomeDto
中,您定义了另一个
id
变量,该变量隐藏了第一个变量,因此使用对该类或任何继承的
SomeDto
类的引用的每次调用都将调用
SomeDto
类中定义的新
id
变量


当抽象类中的方法从哪个id读取时会发生什么 然后是什么

抽象类中对
id
的每次调用都将使用抽象类中的
id
,因此在
AbstractDto
中实现并使用变量
id
的方法将使用
AbstractDto
一个

注释抽象超类中定义的实例变量:

这是一些对抽象类的实例变量进行注释的实际示例:


它被称为。这可能会有帮助:这里唯一的派生是类本身。派生类中的
id
变量不是派生的、继承的等。请查看我的编辑:哪个id被设置为AbstractDto中的id还是SomeDto中的id?当抽象类中的方法从id中读取然后使用哪个id时,会发生什么情况?@confile这是回答您的问题还是您有其他问题?请随便问我,我可以注释抽象超类中定义的实例变量吗?这样抽象类仍然可以使用变量。@confile只需像任何实例变量一样对其进行注释,无论该类是否抽象,都可以找到示例或