Backend Java Technology

[Java / @Override] オーバーライドとは

2020-12-24

オーバーライドに関して、簡単に整理。


オーバーライドとは?

スーパークラスのメソッドをサブクラスで書きかえること。


オーバーライド例


SuperClassのmath()では、引数のxとyを入れると、掛け算されるようになっている。

Subclassでオーバーライドすることで、math()が、足し算に変更することができる。


よって、superClass.math(10,10)で呼び出すと、SuperClassで定義したmath()は掛け算が定義されているため、100という結果が出る。

subClass.math(10,10)で呼び出すと、オーバーライドでSubClassのmath()は掛け算から足し算に書き換えているので、20という結果がでる。


SuperClassの変数に対して、subClassのメソッドが使える

先ほどはSubClassから変数subclassを作って、足し算のmath()を呼び出した。

SuperClassの変数に対して、subClassのオブジェクトを格納した時、もしオーバーライドしていると、サブクラスのメソッドが呼び出される。

よって、

SuperClass subclass = new SubClass();
subclass.math(10,10);

で呼び出した時も、math()は足し算として呼び出される。

「@override」とは?

アノテーションと言われる。

@overrideをつけることによって、引数が違う名前になった時に、エラーになるようチェックをつけることができる。

@overrideがある状態で、サブクラスのmath()の名前をmath1()など、別の名前に変えるとエラーが出る。



「@override」のメリットは?

同じ名前を書くように制限をかけることによって、スペルミスでオーバーライドができていなかったり、逆にオーバーライドするつもりがなかったのに、オーバーライドしてしまっていたという事態を防ぐことができる。


今回使ったコード

//例1

public class Main{
    public static void main(String[] args){
        SuperClass superClass = new SuperClass();
        superClass.math(10,10);
        
        SubClass subclass = new SubClass();
        subclass.math(10,10);
    }
}

//スーパークラス
class SuperClass{
    public void math(int x1, int y1){
        int z1 = x1 * y1;
        System.out.println("x1 * y1 =" + z1);
    }
}

//サブクラス
class SubClass extends SuperClass {
    @Override
    public void math(int x2, int y2){
        int z2 = x2 + y2;
        System.out.println("x1 + y1 = " + z2);
    }
}

-Backend, Java, Technology