問題
あなたは、User
クラスに greet()
というメソッドを定義しようとしています。
このメソッドでは、ユーザーの名前(name
)を使って挨拶メッセージを出力したいと考えています。
しかし、うっかりこの greet()
メソッドを static
として定義してしまうと、name
というインスタンス変数にアクセスできずエラーになることに気づきます。
この問題では、static
メソッドと インスタンス変数の関係性を確認し、
エラーになる理由と正しい設計を体験してください。
出力のイメージ(正しく書けた場合)
Hello, Alice!
Hello, Bob!
要件
User
クラスを作成し、インスタンス変数name
を定義することgreet()
メソッドでSystem.out.println("Hello, " + name + "!");
を出力すること- 最初に
greet()
を static で書き、コンパイルエラーになることを確認する - エラーの原因を理解し、staticを外して修正したバージョンを作成すること
テストコード(Main.java)
public class Main {
public static void main(String[] args) {
User u1 = new User("Alice");
User u2 = new User("Bob");
u1.greet();
u2.greet();
}
}
ヒント
- staticメソッドは インスタンスがなくても呼べるが、
インスタンス変数は インスタンスに属するため static からは見えない static
を外してメソッドをインスタンスメソッドにすればname
を使えるようになる