※ ChatGPTを利用し、要約された質問です(原文:java:サブクラスメソッドを呼び出したいです。)
Java: How to Call Subclass Methods
このQ&Aのポイント
I want to call the method in the subclass that overrides the abstract class in Java. However, the compilation does not pass.
Even if it passes, the command prompt does not return the correct result for the addition of numbers.
The UseSam class does not work properly. Can you please help me?
java のプログラムで抽象クラスをオーバーライドしたサブクラスのメソッドをスーパークラスで呼び出したいのですが、どうしてもコンパイルが通りません。また通ったとしてもコマンドプロンプト画面で、
c:\File>javac UseSam.java
c:\File>java UseSam 5 6
c:\File>
となってしまい(この問題で求められている回答)5+6の結果 11 が返ってきません。
c:\File>java UseSam a a
c:\File>型が違います
c:\File>java UseSam 3 4 5
c:\File>引数の個数が不正です
上記のように打つとエラーメッセージだけは返ってきます。
つたない文章とはなってしまいましたが、ご教授のほどよろしくお願いいたします。
プログラムは下記のとおりとなります。(問題点などの指摘などしていただけたらありがたいです)
抽象クラスAbsSamは抽象メソッドadd含んでいる。
抽象メソッドaddは整数を返すメソッドで、整数型の引数aとbをとる。
abstract class AbsSam {
public abstract int add(int a, int b);
}
Samでは、抽象メソッドaddを実装し、addは引数a,bの和を返す。
public class Sam extends AbsSam {
public int add(int a,int b) {
return a + b ;
}
}
mainメソッドを含むUseSam。
プログラム実行時、引数として2つの整数を渡します。
c:\File>java UseSam 5 6
c:\File>11
と計算結果が返ってくる。
(条件)
・引数が2個でない場合、エラーメッセージを返す。
・引数が数値でない場合、エラーメッセージを返す。
・正しい引数が与えられた場合、addメソッドを実行し、addメソッドの続行結果を表示して終了とする。
public class UseSample {
public static void main( String[] args ) {
try {
//引数が2個でない場合
if(args.length != 2){
System.out.println("エラーメッセージ:引数の個数が不正です");
//引数が2個の場合
} else if (args.length == 2) {
int a = Integer.parseInt( args[0] );
int b = Integer.parseInt( args[1] );
AbsSam sum = new Sam();
sum.a = a;
sum.b = b;
System.out.println ("計算結果" + sum.add());
} else {
System.out.println("エラー");
}
//例外処理
} catch(NumberFormatException e) {
System.out.println("エラーメッセージ:引数の型が不正です" );
} catch(Exception e) {
System.out.println("エラー");
}
}
}
抽象クラスとサブクラスは問題ないのですが、UseSamがうまく動作しません。
ご教授のほどよろしく願いいたします。
お礼
ありがとうございます! sum.a = a; sum.b = b; を外し、 System.out.println ("計算結果" + sum.add(a, b)); 教えて頂いたとおり入力したところ期待する動作が返ってきました! ありがとうございます。 コンパイルエラーの説明とてもわかりやすかったです。