23JON
@23JON (23 JON)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

なぜエラーとなるのかがわからない

Q&A

Closed

以下3つのプログラムを実行したところ、エラーメッセージが出ました。

/* Person.java  */
public class Person {
    protected String name;

    public Person(String name) {
        this.name = name;
    }

    public void hello() {
        System.out.println("こんにちは," + name + "です.");
    }

    public void bye() {
        System.out.println("さよなら.");
    }
}
/* SalesPerson.java  */
public class SalesPerson extends Person {
    public SalesPerson(String name) {
        super(name);
    }

    public void bye() {
        System.out.println(name + "が担当しました.失礼します.");
    }

    public void thanks() {
        System.out.println("ありがとうございました.");
    }
}
/* TestPersons.java に保存 */
public class TestPersons {
    public static void main(String args[]) {
        Person taro = new Person("太郎");
        taro.hello();
        taro.bye();

        SalesPerson ichiro = new SalesPerson("一郎");
        ichiro.hello();
        ichiro.thanks();
        ichiro.bye();

        Person p = ichiro;
        p.hello();
        p.thanks();
        p.bye(); 

        SalesPerson sp = taro;
    }
}

エラーメッセージ

~/java$ javac TestPersons.java
TestPersons.java:14: エラー: シンボルを見つけられません
        p.thanks();
         ^
  シンボル:   メソッド thanks()
  場所: タイプPersonの変数 p
TestPersons.java:17: エラー: 不適合な型: PersonをSalesPersonに変換できません:
        SalesPerson sp = taro;
                         ^
エラー2個

上記のようなエラーメッセージが出たので、一応エラー部分の二箇所を消してみたら、
きちんと実行できました。

~/java$ java TestPersons
こんにちは,太郎です.
さよなら.
こんにちは,一郎です.
ありがとうございました.
一郎が担当しました.失礼します.
こんにちは,一郎です.
一郎が担当しました.失礼します.

しかし、なぜ、その二箇所がエラーの原因となっているのかがよくわかりませんでした。
プログラムできただけでは意味がないので、教えてくれるととても助かります。

0

1Answer

まず、こちらからですが

TestPersons.java:14: エラー: シンボルを見つけられません
        p.thanks();
         ^
  シンボル:   メソッド thanks()
  場所: タイプPersonの変数 p

これはエラーメッセージの通り、Person.javaにてthanks()メソッドが定義されていないのが
原因です。

Person.javaにthanks()メソッドを定義すればエラーは解消します。


そしてもう一つですが、これもエラーメッセージの通りです。

TestPersons.java:17: エラー: 不適合な型: PersonをSalesPersonに変換できません:
        SalesPerson sp = taro;
                         ^

こちらはPersonクラスの変数taroをSalesPersonクラスの変数spに変換しようとしているので
エラーが出ています。
質問者さんが得たい実行結果が分からないので、これについては理由だけを書いておきます。

0Like

Comments

  1. @23JON

    Questioner

    ありがとうございます。
    エラーの原因が知れて、理解が深まりました。
  2. 解決したのならば、質問についてはクローズしてください。

Your answer might help someone💌