Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 - Fatal编程技术网

如何在Java中不同子对象之间不同的父对象中放置静态变量

如何在Java中不同子对象之间不同的父对象中放置静态变量,java,inheritance,Java,Inheritance,Conider我有一个名为Entity的类,它有3个子类: 客户实体,员工实体和产品实体 我想要一个静态属性\u nextId(它为新记录提供新id) \u nextId在每个实体中具有不同的值,但它是所有实体子项的公共属性 因此,我的问题是如何将\u nextId放入实体类中,并让方法更改此值,同时为每个子类获取不同的值 谢谢。假设实体是抽象的,您可以创建一个: protected abstract getNextId(); 每个具体子类需要实现的方法。例如,该实现可以依赖于静态计数器。您必

Conider我有一个名为
Entity
的类,它有3个子类:
客户实体
员工实体
产品实体

我想要一个静态属性
\u nextId
(它为新记录提供新id)
\u nextId
在每个实体中具有不同的值,但它是所有实体子项的公共属性

因此,我的问题是如何将
\u nextId
放入
实体
类中,并让方法更改此值,同时为每个子类获取不同的值


谢谢。

假设
实体是抽象的,您可以创建一个:

protected abstract getNextId();

每个具体子类需要实现的方法。例如,该实现可以依赖于静态计数器。

您必须隐藏它。这意味着子类中也需要有相同的变量


如果在超类中声明静态变量,则所有子类都会访问相同的变量,直到它们通过声明具有相同名称的变量来隐藏该变量为止

你为什么希望它是静态的?哦,因为它是一个id。尽管我不确信整体方法是正确的,但为什么不能将它添加到每个类中呢?我想将它放在Parents中编写的常用方法的父类中,但是静态成员不会被覆盖,它们是隐藏的。您可以在每个子类中放置一个静态id,并让实体声明一个抽象的getNextId方法,该方法返回每个类的静态属性。这正是assylias所说的。如果我在超类中有一个使用此属性的方法,将调用哪个方法?如果不重写父类中的方法,将返回父类的值。如果您在比如ProductEntity中重写getId(),并且ProductEntity隐藏了超类值,那么它将返回它自己的值,而不是父类。如果getNextId()是抽象的,我不能使它成为静态的。为什么要使
getNextId
抽象?
ClientEntity
中的一个可能实现是:
public abstract getNextId(){return++nextId;}
其中
nextId
ClientEntity
的静态成员。另外,
getNextId
可能应该是公共的,而不是受保护的。因此,要明确该方法不是静态的,但我在每个子级中重写它以返回静态结果,对吗?