オーバーライドとオーバーロード | override and overload | Java

スポンサーリンク

オーバーライドとオーバーロド、名前が似ていてわからなくなりませんか。しっかり復習をしておきましょう。

スポンサーリンク

オーバーライドとオーバーロードの比較コード

次のコード、実行するとどうなるでしょう?

public class MainActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SuperClass superClass = new SuperClass();
            Log.d("Log0","   SubClass.getString() :"+superClass.getString());
        SubClass subClass = new SubClass();
            Log.d("Log0","subSubClass.getString() :"+subClass.getString());
            Log.d("Log0","subSubClass.getInt() :"+subClass.getInt());
            Log.d("Log0","subSubClass.getInt(5) :"+subClass.getInt(5));
            Log.d("Log0","subSubClass.getInt(5,10) :"+subClass.getInt(5,10));
    }
}
class SuperClass{
    public String getString(){ //オーバーライドされるメソッド!
        return "Hello";
    }
}
class SubClass extends SuperClass{
    private final int BASE_NUMBER = 10;
    public String getString(){ //オーバーライドしている!
        return "GoodBye!";
    }
    public int getInt(){ //ここからがオーバーロード
        return BASE_NUMBER;
    }
    public int getInt(int number){
        return BASE_NUMBER*number;
    }
    public int getInt(int number1 ,int number2){
        return BASE_NUMBER*number1*number2;
    }
}

SuperClassのgetStringをSubClassがオーバーライドしています。上書きですね。

もしgetStringのオーバーライドを禁止したいのなら、SuperClassにおいてpublic final String getString()とします。

SubClassは3つのgetIntメソッドを持ちます。これがオーバーロードです。引数の型、引数の数によって別々のメソッドとして扱われます。

結果

Log0: SubClass.getString() :Hello
Log0: subSubClass.getString() :GoodBye!
Log0: subSubClass.getInt() :10
Log0: subSubClass.getInt(5) :50
Log0: subSubClass.getInt(5,10) :500