ひびのログ

日々ではないけどログを出力していくブログ

Java のインスタンスから static メソッド・フィールドを呼び出したらどうなるのか?

ちょっと気になったので試したメモ。

結論

呼び出せる。コンパイル通る。警告すら出ない。

検証内容

環境

  • Windows 7 64bit(コマンドプロンプトにてコンパイル・実行)
  • Java9

ソース

// Main.java
class Main {
    public static void main(String[] args) {
        Test instance = new Test();
        System.out.println(instance.field);
        System.out.println(instance.method());
    }
}

class Test {
    public static String field = "static field";
    public static String method() {
        return "static method!";
    }
}

実行結果

C:\work>javac Main.java
C:\work>java Main
static field
static method!

感想

実行できるとは思っていたが、コンパイル時に警告がでると考えていた 。 実際には警告すら出ずにコンパイルできた。

いずれにしろ推奨はしない。 理由は、インスタンスメソッド・フィールドと区別が付きづらくなるため。

公式ドキュメント等は調べていません。

ついでに

Java10 きましたね。 var(ローカル型推論)が来たので、バリバリ使っていきたいと思います。

人によっては「やめてくれ!」となるかもしれませんが、 日頃 TypeScript とか Scala とかやってると型推論使いたくなっちゃいます。