gpt4 book ai didi

Java继承方法重写实例变量

转载 作者:行者123 更新时间:2023-12-01 23:46:52 28 4
gpt4 key购买 nike

我面临着一种我不理解的奇怪行为。事实上,我有一个 DAO AbstractFacade,其中注入(inject)了一个 EntityManager。从这个抽象类我派生了许多子类。首先,该项目无法正常运行并导致了许​​多异常。然后我从错误消息中注意到我在让 EntityManager 执行持久性工作时遇到问题。这很奇怪,因为我在抽象类中有一个 getter,它返回

entityManager.
public class AbstractFacade<T> {
private EntityManager em;
private Class<T> entityClass;

protected EntityManager getEntityManager() {
return em;
}

public AbstractFacade(Class entityClass){
this.entityClass = entityClass;
}

所以我想知道为什么它不能在子类中工作?我有一个想法来重写该方法,解决了问题并且不再出现异常!

@Stateless
@LocalBean
public class AirportFacade extends AbstractFacade<Airport> implements AirportFacadeLocal{
@PersistenceContext(unitName = "flams_pu")
private EntityManager em;

public AirportFacade(){
super(Airport.class);
}

@Override
public EntityManager getEntityManager(){
return em;
}

到目前为止一切都很好,但我不满意,因为我不明白为什么它在覆盖 getter 之前不起作用??

所以,如果有人知道原因,请告诉我,非常感谢。

最佳答案

您无法覆盖实例变量。如果您在子类中重新声明它,则会用新变量隐藏原始变量,但两者仍然存在。

在第一种情况下,返回了 AbstractFacade#em 变量,因为这是 getEntityManager() 方法所在的位置。

一旦您覆盖getEntityManager()方法,就会返回AirportFacade#em变量。

关于Java继承方法重写实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16897740/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com