こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

java:サブクラスメソッドを呼び出したいです。

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がうまく動作しません。
ご教授のほどよろしく願いいたします。

投稿日時 - 2012-05-20 14:08:01

QNo.7486045

すぐに回答ほしいです

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

まず、コンパイルエラーですが、エラーメッセージをしっかりと読めばすぐに解決できると思いますよ。
下記の箇所で下記の様なコンパイルエラーメッセージが出たかと思います。


AbsSam sum = new Sam();
sum.a = a;  // エラー : 「シンボル: 変数 a  シンボルを見つけられません。」
sum.b = b;  // エラー : 「シンボル: 変数 b  シンボルを見つけられません。」
System.out.println ("計算結果" + sum.add());
// エラー : 「 add(int,int) (test.AbsSam 内) を () に適用できません」


つまり、AbsSam にaやbというフィールドはなく、addメソッドは引数にintを2つ取るはずだから引数無しでは呼び出せません、とコンパイラは行っています。
したがって、修正すると↓のようになります。


AbsSam sum = new Sam();
System.out.println ("計算結果" + sum.add(a, b));



これで期待される動作になりませんか?

参考URL:http://www.javaroad.jp/java_class5.htm

投稿日時 - 2012-05-20 16:02:18

お礼

ありがとうございます!
sum.a = a;
sum.b = b;
を外し、
System.out.println ("計算結果" + sum.add(a, b));
教えて頂いたとおり入力したところ期待する動作が返ってきました!
ありがとうございます。
コンパイルエラーの説明とてもわかりやすかったです。

投稿日時 - 2012-05-20 17:33:00

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問