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.
}

3番目のクラスにはメソッドがあります

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

提供したコードスニペットに問題はありません。nullポインタ例外の原因は別のものです...スタックトレースを確認するか、問題の原因となっている行を正確に特定できる場合は、問題の原因を特定するのに役立ちます。問題。

于 2012-09-17T12:49:57.480 に答える
1

最初の推測:あなたの問題はどこかにあります:引数タイプが実装のスーパークラスまたはインターフェースであると想定されている場合、引数として実装を提供することに何の問題もありません。

于 2012-09-17T12:51:15.603 に答える
1

メソッドにエラーがありますmyMethod
このコード

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

NPEを投げられない

于 2012-09-17T12:47:08.397 に答える
0

関数を含むクラスが正しく構築されていないことに気付いたので、NPE はメソッドが原因で、それを使用する前に変数を null に設定しなかった私の愚かさが原因でした!

したがって、わざわざ答えてくれたすべての人に+1。皆さんが書いているのと同じように、私はこれに気づきました。

于 2012-09-17T12:53:40.490 に答える