86789


以下のBクラスのメインメソッドを実行したいです。

[code]

    package package_35;
    
    public class A {
    
        private void print() {
            System.out.println("A");
        }
    
        public void a() {
            print();
        }
    }
    
    
[/code]

[code]

    package package_35;
    
    public class B extends A {
    
        private void print() {
            System.out.println("B");
        }
    
        public void b() {
            print();
        }
    
        public static void main(String[] args) {
            B b = new B();
            b.a();
            b.b();
        }
    }
    
[/code]

コマンドプロンプトにて、以下の順でコンパイル、実行を試しましたが、例外出力されます。

[code]

    javac A.java B.java
    java B.class
    
[/code]

[code]

    エラー: メイン・クラスB.classを検出およびロードできませんでした
    原因: java.lang.ClassNotFoundException: B.class
    
[/code]

回答への返信と結果：DEWA Kazuyuki - 出羽和之 様の回答にて意図通りの動作を確認しました。ありがとうございます。


CC BY-SA 4.0
2022-03-10T17:02:21.830
86788
2022-03-12T05:30:08.877
2022-03-12T05:30:08.877
51783
51783
question
java
継承クラスの実行時、java.lang.ClassNotFoundExceptionとなる


  * (大抵の場合)class ファイルは package に従ってファイルシステム上に配置されている必要がある
  * `java` コマンドは、 package 名も含めたクラス名を渡す 
    * 質問文中で渡している `B.class` というのはファイル名なので誤り

という点を満たす必要があります。

具体的には、次のようにすれば良いです:

[code]

    javac -d . A.java B.java
    java package_35.B
    
[/code]

次の回答にもう少し詳細に説明を記述していますのでこちらも参照してみてください:

  * [Javaプログラムがターミナルから実行できない](https://ja.stackoverflow.com/a/54441/2808)

(注: この回答はJava11のころに行ったもので、[Java17の
`javac`](https://docs.oracle.com/javase/jp/17/docs/specs/man/javac.html)は仕様が追加されているようですが、今回の質問の範囲においては影響ありません)


CC BY-SA 4.0
2022-03-10T23:15:59.310
86789
2022-03-10T23:28:04.823
2022-03-10T23:28:04.823
2808
2808
86788
answer