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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

761閲覧

Javaでオーバーライドしたメソッド内で戻り値にgetterを使って値を乗算して返したい

num

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/04/25 01:04

編集2018/04/25 01:48

前提・実現したいこと

Java初心者です。
演習でJavaでボーナスを表示するプログラムを作っています。
コマンドライン引数で値を受け取り、それに応じた役職に応じてボーナス額を
表示する、といった内容です。

発生している問題・エラーメッセージ

getBonus()メソッドをオーバーライドして、
getSalaryで値を返して、それに乗算した値が欲しいです。

該当のソースコード

Java

1 2public abstract class Employee { 3 4 private String name; 5 private int salary; 6 7 public Employee(String name,int salary) { 8 this.name = name; 9 this.setSalary(salary); 10 } 11 12 public void introduce() { 13 System.out.println(getPost() + "職の" + name + "です。"); 14 System.out.println("ボーナスは" + salary + "でした。"); 15 } 16 17 public abstract int getBonus(); 18 public abstract String getPost(); 19 20 public int getSalary() { 21 return salary; 22 } 23 24 public void setSalary(int salary) { 25 this.salary = salary; 26 } 27 28 29 30} 31

Java

1 2public class HighEmployee extends Employee{ 3 4 public HighEmployee(String name,int salary) { 5 super(name,salary); 6 } 7 8 public String getPost() { 9 return "上級"; 10 } 11 12 13    @Override 14 public int getBonus() { 15 return getSalary() * 5; 16 } 17 18}

Java

1 2public class LowEmployee extends Employee{ 3 4 public LowEmployee(String name,int salary) { 5 super(name,salary); 6 } 7 8 public String getPost() { 9 return "下級"; 10 } 11 12 @Override 13 public int getBonus() { 14 return getSalary()*2; 15 } 16} 17

Java

1 2public class Main { 3 4 public static void main(String[] args) { 5 // TODO 自動生成されたメソッド・スタブ 6 7 if(Integer.parseInt(args[0]) == 1) { 8 HighEmployee emp = new HighEmployee(args[1],Integer.parseInt(args[2])); 9 emp.introduce(); 10 emp.getPost(); 11 emp.getBonus(); 12 } 13 else if(Integer.parseInt(args[0]) == 2) { 14 LowEmployee emp = new LowEmployee(args[1],Integer.parseInt(args[2])); 15 emp.introduce(); 16 emp.getPost(); 17 emp.getBonus(); 18 } 19 20 } 21 22} 23

結果:
コマンドライン引数
1 田中 500000

上級職の田中です。
ボーナスは500000でした。

試したこと

スーパークラスのメンバ変数のアクセス修飾子がクラス図でprivateと
指定されているので、getter/setterを使って使用できるようにした。

補足情報(FW/ツールのバージョンなど)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2018/04/25 01:10

コードをマークダウンしてください。質問編集画面でコード部分を選択し(できればクラスごと)、上部にある<code>を押して質問を更新してください。
num

2018/04/25 01:48

すみません、マークダウンしました。初めて利用したので、また不備があれば教えて頂ければ幸いです。
guest

回答2

0

-------削除しました-------

投稿2018/04/25 02:00

編集2018/04/25 02:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

introduceメソッド内での出力で

java

1System.out.println("ボーナスは" + salary + "でした。");

ここでsararyを指定しているため、コンストラクタで入力された給料がそのままここに反映され、ボーナス計算は関係なくなります。Main.main内のgetPostやgetBonusは代入したり出力したりすることがなく、ただ行き場のない値として消えるだけです。

ボーナスをここで出力したいなら、こうします。

java

1System.out.println("ボーナスは" + getBonus() + "でした。");

投稿2018/04/25 01:50

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

num

2018/04/25 01:55

ありがとうございます! inroduce内でそのままsalaryを出力してしまっていたようですね...... getPostの方は普通にintroduce内で使用していたのに、getBonusを使用していなかったので、以後気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問