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