• 締切済み

パッケージ化とクラスパスについて

いつもお世話になっております。 パッケージ化について教えて下さい。 ■動作確認環境 j2sdk 1.4.2_12 CLASSPATH の設定は .;C:\sample です。 ----- 現在、以下のようなフォルダ構成で、パッケージ化とアクセス制御の勉強をしています。 C:\sample  |__ testpackage01     |__ TestParent.java C:\sample  |__ testpackage02     |__ TestChild.java やりたかったことは、TestChild が TestParent を継承し、"別パッケージでも親クラスの protected 変数 / メソッドはアクセスできる"ということの確認です。 しかし、TestParent の実行時に "NoClassDefFoundError: TestParent (wrong name: testpackage01/TestParent)" の RunTimeException が発生してしまいます。 コンパイルは正常に通ります。また、TestParent のパッケージ宣言 "package testpackage01;" をコメントアウトすると、正常に実行できます。 TestParent の処理は、mainメソッドの中で、文字列の表示を 1行行っているだけです。 自分ではもうどこをどうしたらよいのか、さっぱり分からなくなってしまいました。 間違っている部分をどなたかにご教授頂けたら幸いです。 宜しくお願い致します。

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

>C:\sample\testpackage01>java TestParent 実行開始ディレクトリー=無名パッケージとして扱われるので、 TestParentに package宣言を書くとエラーになります。 それに、package内のクラスから直接実行開始というのは、packageの解説サイトでもあまりみたことないですけど。 実行開始ディレクトリー(無名パッケージ)を C:\sample として、ここにmain実行クラスをおいて mainクラスで testpackage01.TestParent と testpackage02.TestChild とのインスタンスを生成して、各インスタンスから実行したmethodがどのように振る舞うのかを見ることで protected methodや public methodの挙動を捕らえることが出来ると思います。 http://www.nextindex.net/java/packageUse.html

参考URL:
http://www.nextindex.net/java/packageUse.html
daisy_k
質問者

お礼

今回は、javaコマンドの後のクラス名は「完全修飾クラス名」を記述することによって、疑問に思っていたことは解決致しました。 main実行クラスについては、あくまでもデバッグのため暫定的に記述したものです。 ご回答ありがとうございました。

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

java実行時のディレクトリとjavaコマンドの引数を書いてみてください。

daisy_k
質問者

補足

Bonjin さん、ご回答ありがとうございます。 java実行時のディレクトリとjavaコマンドの引数は、以下になります。 C:\sample\testpackage01>java TestParent 再度ご回答頂けたら幸いです。 宜しくお願い致します。

関連するQ&A