オーバーライドとオーバーロド、名前が似ていてわからなくなりませんか。しっかり復習をしておきましょう。
オーバーライドとオーバーロードの比較コード
次のコード、実行するとどうなるでしょう?
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