2015年9月28日月曜日

extendsとはなにか

extendsというのはクラスを継承するときに使われるもので、クラスを継承することで違うクラスのメンバ変数やメソッドにアクセスすることができます。この継承されたクラスは、継承したクラスにとっての「スーパークラス」と呼ばれます。


では実際にコードを見てextendsおよびクラスの継承というものを確認してみましょう。

class Test{
    public static void main(String args[]){
        SubTest subtest = new SubTest();
        subtest.display(5);
    }
}

class SubTest{
    public static void display(int Num){
        System.out.println(Num);
    }
 }

このプラグラムがなにをしているかというと、Subtestのオブジェクトを作って、Subtestクラスのdisplayというメソッドで数字を表示しているだけですね。簡単です。

でも、このメソッドを違うクラスでも使いたい!という場合はどうすればいいでしょうか。例えば、ほとんどのメソッドやメンバ変数は共通しているけど、すこしだけ変更を加えたクラスがほしい・・・そんなときに使うのがextendsとクラスの継承です。このSubTestクラスをスーパークラスとして継承する新たなクラスを書きくわえてみましょう。

class Test{
    public static void main(String args[]){
        Keisyo keisyoosuruyo = new Keisyo();

        keisyoosuruyo.display(44);
        keisyoosuruyo.display(5);
        keisyoosuruyo.display(4648);
    }
}

class SubTest{
    public static void display(int Num){
        System.out.println(Num);
    }
 }

class Keisyo extends SubTest{

}
上記のプログラムを見てみてください。メインメソッドの場所でKeisyoクラスのオブジェクトを作成していますが、Keisyoクラスのなかには何もはいっていません。かわりにKeisyoクラスはSubTestクラスを継承しています。このときSubTestクラスはKeisyoクラスのスーパークラスです。

KeisyoクラスはSubTestクラスを継承しているため、KeisyoクラスのオブジェクトkeisyoosuruyoはSubTestクラスのメソッド「display」にアクセスすることができます。 keisyoosuruyo.display(44);のようにSubTestクラスのメソッドをKeisyoクラスのオブジェクトが使っていますが、問題なく動きます。

もちろん以下のように、SubTestクラスのオブジェクトもSubTestクラスのメソッドにアクセスすることが可能です。
class Test{
    public static void main(String args[]){
        Keisyo keisyoosuruyo = new Keisyo();
        SubTest subtest = new SubTest();

        keisyoosuruyo.display(44);
        subtest.display(325);
    }
}

class SubTest{
    public static void display(int Num){
        System.out.println(Num);
    }
 }

class Keisyo extends SubTest{


}