我有两个课程如下。
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对象。但这看起来很糟糕,因为我希望再次使用抽象类,并为特定实例扩展它。
我是否正确地解决了这个问题,或者我是否可以不将超类的子类发送到期望超类副本的方法?
提前感谢。
大卫。
编辑:
我只想感谢所有花时间回答的人。你们都是对的。问题出在其他地方。
事实证明,在我的职能范围内,我正在宣布另一个“临时对象”,并且我宣布其成员处于错误的秩序......花了一段时间找到那个!
再次感谢大家,写这个问题的过程与回复一样有用。我们都得到了相同的结论,大约是在sime时间(我意识到这就像你在哪里发布回复一样)。
答案 0 :(得分:1)
您的方法myMethod
出错
这段代码
myImplmentationOfAbstractClass myABC = new myImplmentationOfAbstractClass();
someFunctionality.myMethod(myABC);//this causes an NPE
不能'抛出NPE
答案 1 :(得分:1)
您提供的代码片段没有任何问题,空指针异常的原因是其他的...可能是您检查堆栈跟踪或者您是否可以准确识别导致问题的行,它会更好帮助确定问题。
答案 2 :(得分:1)
首先猜测:你的问题出在其他地方:如果参数类型应该是实现的超类或接口,那么将实现作为参数提供是没有错的。
答案 3 :(得分:0)
我刚刚意识到具有该功能的类没有正确构建,所以NPE是由于我在使用它之前没有将变量设置为null的愚蠢而导致的方法! / p>
所以那些打扰回答的人都要+1。我意识到这就像你们写作的那些人一样。