問11この記事は2015年12月3日に書かれたものです。内容が古い可能性がありますのでご注意ください。通称JavaGoldのオリジナル問題を紹介していきたいと思います。前回の解答まずは、前回の解答から。正解は「(2)」となります。5、6行目でBikeクラスからオブジェクトを2つ作成しています。その各々に対して8、9行目でup()メソッドを実行しています。up()メソッドはインスタンスメソッドであり、ここまでは特に問題ありません。この問題のポイントは11、12行目になります。11行目ではchange()メソッドを呼び出していますが、このメソッドはstaticメソッドとして定義されています。そのため、本来であればb1.change(...)ではなく、Bike.change(...)のように「クラス名.メソッド名()」と呼び出すのが通常です。Javaではstaticメソッドもこのように「変数名.メソッド名()」の形で呼び出すことを許可していますので、ここは特に問題ありません。問題はありませんが、コンパイル時に以下の様な警告は発生してしまいます。合わせて押さえておきましょう。アクセスする必要があります次に12行目では、static変数であるmodelにアクセスしています。こちらも本来は「Bike.model」のように「クラス名.static変数名」のようにアクセスしなくてはいけないところですが、「変数名.static変数名」の形でアクセスしています。(これはインスタンス変数と同じアクセス方法です。)こちらもメソッドの時と同様にJavaではどちらのアクセス方法も許容していますので特に問題ありません。実行結果は11行目で実行した結果が反映し、選択肢(2)の結果となります。model変数はb1とb2で共有している形になります。static変数の基本となりますが、必ず抑えておきましょう。それではもう一問、static変数とインスタンス変数の問題です。