質問: 100; public int getVal() { return instanceVal; } **public static int getVal2() { return instanceVal; }** } ### 試したこと ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: 非staticフィールド(=インスタンス変数)は文字通り「特定のインスタンスの中に存在するフィールド」ですので「どのインスタンスか」を特定しなければ「そのフィールド(インスタンス変数)がどこにあるかがわからないので」アクセスできません。 非staticメソッドは**特定のインスタンスに対してしか起動できない**ものであり、かつ起動された際には**どのインスタンスに対して起動されたかをthisを通じて明示的(または暗黙的に)アクセス**できます。非staticフィールドはメソッドの起動対象であるthisを介してアクセスできます。 一方staticメソッドは**特定のインスタンスを仮定せずに起動する**ものであり、起動の際には**起動対象のインスタンスを表すthisは使えない**ものです。ゆえにstaticメソッドからは非staticフィールド(=インスタンス変数)はアクセスできません。