• ベストアンサー

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

nicepeaceの回答

  • ベストアンサー
  • 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 とするとうまくいきました。これもなんだか頭がすっきりしません。 パッケージを使うのは今回初めてなのでまだまだ勉強しなくてはいけませんね。

関連するQ&A

  • 同一パッケージにあるクラスが見つからないエラー

    Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。 tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。 C:\(中略)\mangasearch>javac tagsrch.java tagsrch.java:11: エラー: シンボルを見つけられません public static List<manga> searchByKey(String k[]) throws IOException{ ^ シンボル: クラス manga 場所: クラス tagsrch tagsrch.java:14: エラー: シンボルを見つけられません manga[] list = 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://okwave.jp/qa/q2520327.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{ メソッド{     } }

    • ベストアンサー
    • Java
  • パッケージ内でコンパイルできない

    パッケージを作成して,以下のようなディレクトリ構成にしました. . ├── Sample.java └── vehicle   ├── MiniCar.java   ├── SuperCar.java   └── Vehicle.java vehicleディレクトリ内で $ javac SuperCar.java このようにコンパイルしました.ですが, SuperCar.java:3: シンボルを見つけられません。 シンボル: クラス Vehicle public class SuperCar extends Vehicle { ^ エラー 1 個 このようなエラーが出力されました. 同じディレクトリにあれば,ファイルを見つけに行ってくれると思いましたが, なぜコンパイルできないのでしょうか? #ちなみに,階層を1つ登って #$javac Sample.java #これはコンパイルできて,実行もできました. -- Sample.java -- import vehicle.*; public class Sample {    public static void main(String[] args) {      MiniCar mini = new MiniCar(2);      SuperCar scar = new SuperCar("Red");    } } -- MiniCar.java -- package vehicle; public class MiniCar extends Vehicle {   int num;   public MiniCar(int num) {      super(5,10);      this.num = num;   } } -- SuperCar.java -- package vehicle; public class SuperCar extends Vehicle {   String color;   public SuperCar(String color) {      super(10, 20);      this.color = color;   } } -- Vehicle.java -- package vehicle; public class Vehicle {   private int wheel;   private int wheelDiameter;   public Vehicle(int wheel, int wheelDiameter) {      this.wheel = wheel;      this.wheelDiameter = wheelDiameter;   } }

    • ベストアンサー
    • Java
  • はじめてのパッケージの使い方

    JAVAでのパッケージの使い方について 教えて下さい。 下記を参考にしました。 Javaの道 > Java基本 > パッケージ -2.パッケージの作成 http://www.javaroad.jp/java_package2.htm サンプルにある通りコンパイルをすると うまく行くのですが カレントのディレクトリを変更すると どうすればいいのかわかりません。 知りたいことは カレントディレクトリPackageBから 別ディレクトリのPackageAをインポートすることは可能でしょうか? やってみた結果は以下となります。 PackageB>javac ExPackage2B.java ExPackage2B.java:3: パッケージ PackageA は存在しません。 import PackageA.ExPackage2A; //(4) ^ ExPackage2B.java:7: シンボルを見つけられません。 シンボル: クラス ExPackage2A 場所 : PackageB.ExPackage2B の クラス ExPackage2A ex = new ExPackage2A(); //(6) ^ ExPackage2B.java:7: シンボルを見つけられません。 シンボル: クラス ExPackage2A 場所 : PackageB.ExPackage2B の クラス ExPackage2A ex = new ExPackage2A(); //(6) ^ エラー 3 個 PackageA/ExPackage2A.javaファイル package PackageA; //(1)パッケージPackageAの定義 public class ExPackage2A { //(2)publicなクラスExPackage2Aの定義 public void showClass() { System.out.println("クラスExPackage2Aです。"); } } PackageB/ExPackage2B.javaファイル package PackageB; //(3)パッケージPackageBの定義 import PackageA.ExPackage2A; //(4) public class ExPackage2B { //(5) public static void main(String[] args) { ExPackage2A ex = new ExPackage2A(); //(6) ex.showClass(); //(7) } }

    • ベストアンサー
    • Java
  • packageとimportの関係のコンパイルエラー

    現在JAVAの勉強をしております。 サンプルソースを入力しながら行っております。 カレントディレクトリでコンパイルは正常にできました。 しかし、「packageとimport」の処理を追加しファイルを ディレクトリに移したところうまくコンパイルが通らなく なりました。 パスの間違えかとも思いつつ色々調べているのですが、原因 がつかめません。 検索サイトを使って色々な事例を見てみたのですが、解決 出来ませんでした。 すみませんが、ご指導のほどお願いします。 詳細は下記の通りです。 漏れなどありましたらご指摘していただければ補記します。 JDK:1.3.1 OS:Windows2000ProSP2 ------------------------------------------------------ ディレクトリ D:\JAVAPRESS └─jp └─co └─gihyo └─javapress ├─test │ ATMTest.java │ └─account Account.java CommissionAccount.java コンパイル D:\JavaPress\jp\co\gihyo\javapress\test>javac -classpath D:\JavaPress\Account ATMTest.java ATMTest.java:2: シンボルを解釈処理できません。 シンボル: クラス ATMFrame 位置 : atm の パッケージ import jp.co.gihyo.javapress.atm.ATMFrame; パッケージ ATMTest.javaの内容 package jp.co.gihyo.javapress.test; import jp.co.gihyo.javapress.atm.ATMFrame; import jp.co.gihyo.javapress.account.*; class ATMTest { Account.javaの内容 package jp.co.gihyo.javapress.account; public class Account {

    • ベストアンサー
    • Java
  • 自分で作ったクラスを継承するとエラーが出ます。

    サーブレットを勉強しているのですが、自分で作成したクラスを継承した サーブレットを作成してコンパイルするとその継承したクラスの シンボルを解釈できませんというエラーが出ます。 たとえばclass01というクラスを継承したclass02.javaをコンパイルすると シンボルを解釈できません public class02 extends class01{ といったエラーが出てしまいます。 どうも自分で作ったクラスを読み込めていないようなのですが どうしたらよいのでしょうか? 初歩的な質問かもしれませんが、よろしくお願いします。 ちなみにOSはWin2000、サーブレットはJRUNを使用しています。

    • ベストアンサー
    • Java
  • CLASSPATHに二つのディレクトリ設定するとエラーが出る?

    # 2342062 ではお世話になりました。もう少し質問を明確にします。よろしくお願いします!! CLASSPATHを二つのディレクトリを設定するとエラーが出てしまいます。 理由が分からないので、お願いします! 【状況】 同じディレクトリに 次の2つのファイルがあります。 --- Main.java --- public class Main { public static void main(String[] args) { Sub x = new Sub(); x.test(); } } --- Sub.java --- public class Sub { public void test() { System.out.println("Sub !"); } } 【再現手順】 (1) デフォルトの CLASSPATH は空です。この状態でコンパイルしても問題ありません。 $ echo $CLASSPATH $ javac Main.java $ java Main Sub ! (2) CLASSPATH に . を設定します。この状態でコンパイルしてもやはり問題ありません。 (3) ところが、CLASSPATH にカレントディレクトリ「 . 」ともう一つのディレクトリ(何もファイルがありません)を設定してコンパイルすると、次のようにエラーが出てしまいます。 $ export CLASSPATH=.:tmp $ javac Main.java Main.java:3: シンボルを見つけられません。 シンボル: クラス Sub 場所 : Main の クラス Sub x = new Sub(); ^ ---------------- とりあえず、カレントディレクトリはCLASSPATHに指定してあるので、Sub.classは見つかるはずだと思うのですが、なぜエラーが出るのでしょうか? よろしくお願いします!!

  • CLASSPATHに二つのディレクトリ設定するとエラーが出る?

    CLASSPATHを二つのディレクトリを設定するとエラーが出てしまいます。 理由が分からないので、お願いします! 【状況】 同じディレクトリに 次の2つのファイルがあります。 --- Main.java --- public class Main {  public static void main(String[] args) {   Sub x = new Sub();  x.test();  } } --- Sub.java --- public class Sub {  public void test() {   System.out.println("Sub !");  } } 【再現手順】 (1) デフォルトの CLASSPATH は空です。この状態でコンパイルしても問題ありません。 $ echo $CLASSPATH $ javac Main.java $ java Main Sub ! (2) CLASSPATH に . を設定します。この状態でコンパイルしてもやはり問題ありません。 (3) ところが、CLASSPATH にカレントディレクトリ「 . 」ともう一つのディレクトリ(何もファイルがありません)を設定してコンパイルすると、次のようにエラーが出てしまいます。 $ export CLASSPATH=.:tmp $ javac Main.java Main.java:3: シンボルを見つけられません。 シンボル: クラス Sub 場所 : Main の クラス Sub x = new Sub(); ^ ---------------- とりあえず、カレントディレクトリはCLASSPATHに指定してあるので、Sub.classは見つかるはずだと思うのですが、なぜエラーが出るのでしょうか? よろしくお願いします!!

  • package宣言のディレクトリ構造

    はじめまして、Java初心者な質問です。 package宣言するときの、ディレクトリの構造がどうあるべきか?という質問なのですが、 例えばカレントディレクトリが /home/test/java にあるとして ----------// ClassA.java //----------- package a.b; public class ClassA { /** コンストラクタ */ public ClassA() { } } とした場合、 ClassA.javaファイルとClassA.classはどこに保存されるべきなのでしょうか? 参考書などによると 「aディレクトリ内のbディレクトリ」と書いてあるのですが、どこから見てのaディレクトリ内のbディレクトリなのでしょうか? この場合だと、/home/test/java/a/b/ClassA.java という事なのでしょうか、、? それだったらpackage宣言が package home.test.java.a.b; になるような気がして、困惑しています。 よろしくお願いします><

    • ベストアンサー
    • Java
  • java コンパイルエラー

    java コンパイルエラー java 初心者です。 簡単なプログラムを作りながら練習していたのですが、Exceptionクラスを継承して新しい例外を作る以下のプログラムで、コンパイルエラーとなり、解決できません。 class NewException extends Exception{ public NewException(){ super("エラー"); } } これを javac でコンパイルすると、 NewException.java:3: シンボルを見つけられません。 シンボル: コンストラクタ Exception(java.lang.String) 場所  : Exception の クラス super("エラー"); ^ エラー1個 と言われます。 これを読むと「Exception には String を引数にとるコンストラクタはないよ」と言われているように思えるのですが、そんなはずないのでは。。 もし原因がお分かりの方がいらしたら、ご教示いただけるとありがたいです。

    • ベストアンサー
    • Java
  • java import文のエラー

    javaのソースで、パッケージをimportして使用するための簡単なサンプルを作成しました。 import文でクラス名まで指定すれば問題ないのですが、*を利用するとコンパイルエラーとなってしまいます。 コンパイル時にクラスパスを指定するのかと思って試してみましたが、やはりエラーでした。 回避方法をご存知の方いらっしゃいましたら、教えていただけますでしょうか。 なお、java/javacは、1.5.0_14を使用しています。 ■ソースコード(1) <C:\Work\Test\PackTest.java> package Test; public class PackTest{   public static void methodA(){     System.out.println("パッケージ成功");   } } ■ソースコード(2) <C:\Work\UsePack.java> import Test.*;     //import Test.PackTest; なら成功 class UsePack{   public static void main(String args[]){     PackTest.methodA();   } } ■エラー例(1) >javac -d . PackTest.java (これは成功) >javac UsePack.java   UsePack.java:5: PackTest にアクセスできません。   クラスファイル .\PackTest.java は不正です。   ファイルにクラス PackTest が含まれていません。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。     PackTest.methodA(); ■エラー例(2) >javac -d . PackTest.java (これは成功) >javac -classpath C:\Work\Test UsePack.java   UsePack.java:1: パッケージ Test は存在しません。   import Test.*;   ^   UsePack.java:5: PackTest にアクセスできません。   クラスファイル C:\Work\Test\PackTest.class は不正です。   クラスファイル Test.PackTest に不正なクラスがあります。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。      PackTest.methodA();      ^