質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.20%

Java 継承とオーバーライド

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,577

yk-211

score 39

質問です。
この2つのコードにつきまして、メイン文を別のクラスで
作成しなければならないのですが、どういったことをすればよろしいでしょうか。
また、下のコードについてはオーバーライド出来ているのでしょうか。
教えてください。


public class Calculate{
   
    String Add(int a, int b) {
        return String.valueOf(a+b);
    }
    String subtract(int a,int b){
        return String.valueOf(a-b);
    }
    String multiply(int a,int b){
        return String.valueOf(a*b);
    }
    String divide(int a,int b){
        return String.valueOf(a/b);
    }
 public static void main (String[] args)
    {
        Calculate calc = new Calculate();
        System.out.println(calc.Add(4, 2));
        System.out.println(calc.subtract(4, 2));
        System.out.println(calc.multiply(4, 2));
        System.out.println(calc.divide(4, 2));
    }
}

public class SubCalculate extends Calculate{   
    
    String divide(int a,int b){
        return String.valueOf((a/b)+"余りは"+(a%b));
    }
    public static void main (String[] args){
    Calculate calc = new SubCalculate();
    
    System.out.println(calc.divide(5,2));
    }
}                                                                                            

------------------------------------------------------------------

新たにメイン文を別クラスで作成してみました。
ちょっと違うとは思うのですが・・・

public class Main{
  public static void main(String[] args){
    SubCalculate sc = new SubCalculate();
    sc.divide();
  }
}


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

4 つのファイルをつくりました。
  Calculate.java
  Main10.java
  SubCalculate.java
  Main11.java

Calculate.java
public class Calculate {

    String Add(int a, int b) {
        return String.valueOf(a + b);
    }

    String subtract(int a, int b) {
        return String.valueOf(a - b);
    }

    String multiply(int a, int b) {
        return String.valueOf(a * b);
    }

    String divide(int a, int b) {
        return String.valueOf(a / b);
    }
}
Main10.java
public class Main10 {

    public static void main(String[] args) {
        Calculate calc = new Calculate();
        System.out.println(calc.Add(4, 2));
        System.out.println(calc.subtract(4, 2));
        System.out.println(calc.multiply(4, 2));
        System.out.println(calc.divide(4, 2));
    }

}
SubCalculate.java
public class SubCalculate extends Calculate {   

  @Override
  String divide(int a, int b) {
    final String ans;
    if (b == 0) {
      ans = "0 で割ることはできません。";
    } else {
      ans = String.format("%d 余り %d", (a/b), (a % b));
    }
    return ans;
  }
}
Main11.java
public class Main11 {

    public static void main(String[] args) {
        Calculate calc = new SubCalculate();
        System.out.println(calc.divide(4, 2));
        System.out.println(calc.divide(5, 2));
        System.out.println(calc.divide(4, 0));
    }

}

Main11.java の実行結果:
2 余り 0
2 余り 1
0 で割ることはできません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/26 14:26

    お忙しい中大変ありがとうございます!
    自分でも作成し、同じようなソースコードになりました。

    ありがとうございました。

    キャンセル

0

コンパイルと実行はできました?できると思いますが.

main関数は,どのクラスにも定義できます.実行したいクラスのmain関数のみが呼ばれますので,
そうまごつくことはないと思いますよ.安心してください.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/25 11:20

    ありがとうございます。
    説明不足だったかもしれないので、もう一度書かせていただきます。

    (問題10)
    足し算、引き算、掛け算、割り算を行うクラス(Calculate.java)を作成し、
    各々、計算結果をStringで返却するメソッドを作成してください。
    →上記Calculate.java作成

    (問題11)
    問題10で作成したCalculate.javaを継承したクラス(SubCalculate.java)を作成し、
    割り算のメソッドをオーバーライドして計算結果と余りを返却するメソッドに変更してください。
    →上記SubCalculate.java作成
    -------------------------------------------------------------------------------------------
    そして、追加で問題10、11についてですが、メイン文は別のクラスで作ってください。また、問題11はアノテーションも付けてください。

    というものなのです。
    よく分かっておらず申し訳ありません。

    キャンセル

  • 2015/05/25 11:22

    masa105様
    ありがとうございます。
    そちら記入ミスです・・・
    ファイル・クラス名とも大文字にしております。

    申し訳ありません。

    キャンセル

  • 2015/05/25 22:46

    アノテーションというのは,
    @Override
    ↑これのことでは?

    キャンセル

0

「メイン文を別のクラスで作成する」というのは、
今現在CalculateとSubCalculateにあるmain()メソッドを削除して、
別に新しく作成したクラスにmain()を書いて実行するという意味ではないでしょうか。

継承させるクラスにmain()があると、Staticクラスになりますので
問題の趣旨とは無関係な部分で若干ややこしくなります。削除したほうが継承の理解に繋がるかも。
あとは、MainクラスでCalculateクラスの持つ四則演算を呼び出せば良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/25 12:01

    回答ありがとうございます。
    分かったような分かってないようなですが、
    やってみます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる