当一个类被另外两个类扩展时获取空值

时间:2013-05-13 13:35:32

标签: java spring oop inheritance

我正在为一家金融公司提供后端服务。这个应用程序是使用jpos,spring 3.0.5,hibernate 3.6构建的。此应用程序将在多线程环境中运行,由jpos负责。但是我混淆了应该使用哪种策略来定义一个类,在整个应用程序中可以访问属性和数据成员。

到目前为止我所做的是:

public class MsgHandler 
{

    public Boolean isOffline = true;
    public Boolean isSuccess;
    public Long mobileTxnId;

    setAllData()
    {
        mobileTxnId=1000;
        ..............
    }
}

基本上,在这个课程中,我曾经在整个过程中经常使用我经常使用的所有必要数据。所以我扩展了 MsgHandler

public class A extends MsgHandler 
{

    setAllData();
    System.out.println("Mobile Txn Id: "+mobileTxnId) //its printing the values here
    B b=new B();
    b.useData();
}

现在另一个 B类也在扩展MsgHandler类,但在类BI中没有得到在 A类中设置的mobileTxnId的 null

public class B extends MsgHandler 
{
    useData()
    {
        System.out.println("Mobile Txn Id: "+mobileTxnId) //its not printing the  values here
    }
}

为什么会发生这种情况,因为我正在扩展同一个类,但是在A类中,我得到了mobileTxnId但是在B类中,我得到了mobileTxnId的空值。

使 mobileTxnId 静态是一个好习惯,即使该应用程序将在多线程环境中使用,请建议我

2 个答案:

答案 0 :(得分:2)

ab 相同的对象,因此在setAllData()对象构造函数上调用a也不会调用b对象构造函数。

您需要致电

b.setAllData()

之前使用

b.useData()

答案 1 :(得分:0)

尝试在b.setAllData()之前调用b.useData()或在setAllData()类的初始化块中调用B

所以:

public class A extends MsgHandler {
{
   setAllData();
   System.out.println("Mobile Txn Id: "+mobileTxnId) //its printing the values here
   B b=new B();
   b.setAllData(); //see what I did here
   b.useData();
}

或者:

public class B extends MsgHandler {
{
   setAllData(); //see what I did here
   System.out.println("Mobile Txn Id: "+mobileTxnId) //its not printing the  values here
}

如果这不是您问题的答案,请尝试制定另一个问题。可能是你实际上要求完全不同的东西(即访问扩展相同类的其他类的值/方法等)