mazinlabsのブログ

RubyとかCloudとかその辺の記事を書いたり書かなかったり

Abstractクラスの中に実装したstaticメソッドは呼び出せるのか?

諸事情でやむにやまれずJavaの勉強してます。
本日は抽象クラス(Abstract Class)について勉強中。

抽象クラスは自身のインスタンスを持たないクラスです。
他のクラスのスーパークラスとして使います。

( ´_ゝ`)フーン


インタフェース(interface)と違って実装は持てる*1のが抽象クラスと認識していた。
あとはimplimentsじゃなくてextendsってことがインタフェースとの違いかなと。


で、抽象クラスがインスタンスを持たないのは分かった。
が実装を持てるということはstaticなメソッドを用意すれば、抽象クラスから使えるのかが疑問になったのでやってみた。

abstract class Sample{
  public static void printHoge(){
    System.out.println("hoge");
  }
}   
class TestSample{
  public static void main(String[] args){
    Sample sample = new Sample();
  }
}

まずはインスタンスが作れないことを確認。

% javac TestSample.java                                                     
TestSample.java:3: Sample は abstract です。インスタンスを生成することはできません。
    Sample sample = new Sample();
                    ^
エラー 1 個

インスタンスが作れないことを確認したのでstaticなメソッドを呼び出す。

class TestSample{
  public static void main(String[] args){
    Sample.printHoge();
  }
}

コンパイルして実行

% javac TestSample.java
% java TestSample
hoge

実行できた。
というわけで、抽象クラスで実装したstaticなメソッドは抽象クラスから呼び出すことは可能らしい。


で、これ調べて誰得なんだろ?

*1:Java SE7からinterfaceにデフォルト実装なる機能が追加されたとか