質問: new manga[cnum]; 同一パッケージ内に置かれている以上、tagsrch.javaにおいてmangaクラスが使えるはずだと思います。 ですが、いろいろなサイトを参考にして試してもmangaクラスが見つからないまま、tagsrch.javaがコンパイルできません。 初歩的質問で申し訳ありませんが、よろしくお願いいたします。 -参考- 1.いろいろ試したこと 1-1.カレントディレクトリを保存している場所より1つ上の場所でコンパイルする。 eclipseでtomcatプロジェクトを作成したため、どのクラスファイルにもpackage mangasearch;が含まれていました。なので1-1.を行い「javac パッケージ名/ファイル名」でコンパイルしてみました。 1-2.クラスパスを入れてコンパイルしてみる。 同一パッケージ内なので、この必要はないはずですが、 c:\(中略)\mangasearch>javac -classpath c:\(中略)\mangasearchでコンパイルしてみました。 下記のurlを参考にこの対策を講じましたが、エラーは変わりませんでした。 1-1.1-2.の参考url:http://oshiete.goo.ne.jp/qa/2520327.html 1-3.メソッドをmangalist.java(mangaクラス)上で定義してしまう。 分割をあきらめ、tagsrch.java上のメソッドをmangalist.javaのmangaクラス上に定義してみました。 publicつけたままだと、 c:\(中略)\mangasearch>javac mangalist.java mangalist.java:76: エラー: クラスtagsrchはpublicであり、ファイルtagsrch.javaで宣 言する必要があります となったため、publicをとりました。するとコンパイルは出来ましたが、おそらく異なるパッケージからは使えないクラスとなったため、jsp上でアクセスできないというエラーが発生しました。 org.apache.jasper.jasperexception: javax.servlet.servletexception: java.lang.illegalaccesserror: mangasearch/tagsrch このため、分割してtagsrch.javaを宣言する必要があり、1-3.の対策では最初にあげたmangaクラスを認識する問題に帰着すると思われます。 2.mangalist.java/tagsrch.javaについて mangalist.javaのコンパイルはできています。 mangalist.javaは、ただ単にmangaクラスとそれに付随するフィールド、コンストラクタを記述しただけのファイルです。 ■mangalist.java package mangasearch; class manga{ フィールド名 ・・・ manga(){ //コンストラクタ } } ■tagsrch.java public class tagsrch extends manga{ メソッド{ } }
回答: > 1-2.クラスパスを入れてコンパイルしてみる。 > 同一パッケージ内なので、この必要はないはずですが、 > c:\(中略)\mangasearch>javac -classpath c:\(中略)\mangasearchでコンパイルしてみました。 javacでコンパイルするなら、 classpath/パッケージ/クラス と探すので、これだと、 c:\(中略)\mangasearch/mangasearch/manga.class を探しにいっちゃいますよ。 classpathに指定するディレクトリを、もう1つ上の階層にしてみてください。 eclipseとjavacとどっちを使いたいのはわからないのですが、 eclipseなら プロジェクト名/src/mangasearch/mangalist.java プロジェクト名/src/mangasearch/tagsrch.java になってますか?