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