• ベストアンサー

同一パッケージ内の継承について

同一パッケージ内で継承したクラス Test2.java をコンパイルすると「シンボルを見つけられません シンボル:クラス Test1」とエラーになります。 --------Test1.java------- package test; public class Test1{ メソッド } ------------------------- --------Test2.java------- package test; public class Test2 extends Test1{ メソッド } ------------------------- Test1.java,Test2.javaとも同一フォルダ(D:\java\test)にあります。 ちなみにカレントディレクトリをD:\java\testにして javac Test2.java でコンパイルしようとしています。 同一パッケージ内のクラスを継承するというのはおかしなことなんでしょうか?また、コンパイルの仕方もあわせてご教示願えれば助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicepeace
  • ベストアンサー率58% (7/12)
回答No.2

パッケージに含まれている場合はカレントディレクトリを保存している場所より1つ上の場所でコンパイルします。 今回はD:\java\testに保存してあり、パッケージ名はtestです。 ですから今回はカレントディレクトリをD:\javaの状態にしてください。 その状態で「javac test/Test1.java」とやってみてください。 Test2.javaも同様にやってみてください。 ファイルが保存してある、1つ上の状態にカレントを置いて 「javac パッケージ名/ファイル名」です。

akomot
質問者

お礼

ご回答ありがとうございます。 自分でもいろいろやってみたのですが,カレントディレクトリを D:\java\testにしておいて javac -classpath .. Test2.java とするとうまくいきました。これもなんだか頭がすっきりしません。 パッケージを使うのは今回初めてなのでまだまだ勉強しなくてはいけませんね。

その他の回答 (2)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.3

この辺を熟読するとよいです。 ■型の検索 http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/javac.html#searching 「ソースファイルをコンパイルする場合、 コマンド行で指定したソースファイルに型の定義が見つからないとき、 コンパイラは通常、その型に関する情報を必要とします」 ■クラスの検索方法 http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/findingclasses.html ■Java 起動ツールがユーザクラスを検索する方法 http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/findingclasses.html#userclass 「クラス com.mypackage.MyClassの例による説明」のあたり

akomot
質問者

お礼

ご回答ありがとうございます。 紹介していただいたページを参考にしっかり勉強してみます。

  • bnosuke-x
  • ベストアンサー率39% (43/110)
回答No.1

Test2.java に以下2つのどちらかの修正を行うとうまくいくと思います。 1)Test1 の完全クラス名を import する 具体的には、 import text.Test1; を最初に書く。 2)Test1 を完全クラス名で書く Test1 と書いていたところを全て test.Test1 に置き換える。 あと、コンパイルするとき、カレントディレクトリは「D:\java\」でやってみて下さい。

akomot
質問者

お礼

早速のご回答ありがとうございます。 1)の方法でコンパイルできました。 ただ,なぜカレントディレクトリをD:\javaにしなくてはいけないのかもう少し勉強してみます。

関連するQ&A