0

我有2个课程如下。

public absract class myAbstracClass{

//various methods and stuff.

}

public class myImplmentationOfAbstractClass extends myAbstractClass {

//just implments a call to the abstract class in the constructor.
//no extrac functionality is added in this instance.
}

在第三堂课中,我有一个方法

public class someFunctionality{//

//default constructor

public static void myMethod(myAbstractClass abc)
//do stuff with abc

}

然后在我的代码中调用此方法

public class doWork{

    public static void main(){

    //create my implmented class
    myImplmentationOfAbstractClass myABC = new myImplmentationOfAbstractClass();

    //send this class to my function

    someFunctionality.myMethod(myABC);//this causes an NPE

    }

    }

我显然错过了一些东西,我在谷歌上找不到它。

现在我已经改变了我的方法来接受一个 myImplementationOfAbstractClass 对象。但这似乎很糟糕,因为我预计需要再次使用抽象类,并将其扩展为特定实例。

我是否会错误地处理这个问题,或者我不能将超类的子类发送到期望超类副本的方法?

提前致谢。

大卫。

编辑:

我只想对所有花时间回答的人表示感谢。你们都是对的。问题出在其他地方。

事实证明,在我的函数中,我声明了另一个“临时对象”,并且我以错误的顺序声明了它的成员......花了一段时间才找到那个!

再次感谢大家,写这个问题的过程和回答一样有帮助。大约在同一时间,我们都得出了相同的结论(我意识到这一点,就像你在我猜的回复中发布的那样)。

4

4 回答 4

1

你的方法有误myMethod
这段代码

myImplmentationOfAbstractClass myABC = new myImplmentationOfAbstractClass();
someFunctionality.myMethod(myABC);//this causes an NPE  

不能扔 NPE

于 2012-09-17T12:47:08.397 回答
1

您提供的代码片段没有任何问题,空指针异常的原因是其他原因......可能是如果您检查堆栈跟踪或者您可以准确识别导致问题的行,它将更好地帮助识别问题。

于 2012-09-17T12:49:57.480 回答
1

第一个猜测:您的问题出在其他地方:如果参数类型应该是实现的超类或接口,则将实现作为参数提供没有错。

于 2012-09-17T12:51:15.603 回答
0

我刚刚意识到其中包含该函数的类没有正确构建,所以 NPE 是由于我在使用它之前没有将变量设置为 null 的愚蠢的方法!

所以对所有愿意回答的人+1。我在你们写作的时候意识到了这一点。

于 2012-09-17T12:53:40.490 回答