オーバーライドはクラスの継承とワイドニング変換との関係も掴まないと今ひとつ意味がわからないかと思います。
例えば、以下のクラスがあったとします。
java
1class A {
2 public void hoge() {
3 System.out.println("A");
4 }
5}
6
7class B extends A {
8 public void hoge() {
9 System.out.println("B");
10 }
11}
このとき、BクラスはAクラスのhoge()メソッドをオーバーライドしています。
さて、Bクラスのインスタンスを生成したいと思います。この時、BクラスはAクラスを継承しているので、A型の変数に代入することが可能です(ワイドニング変換)。
このA型の変数aのメソッドhoge()を呼び出します。aはA型なのでAクラスのメソッドhoge()に従って"A"を出力する…のではなく、実体であるBクラスのhoge()メソッドを呼び出し、"B"を出力します。
このように、操作のもととしてはA型のhoge()メソッドという単一のものに対し、Aを継承するクラスのオブジェクトを代入することで、様々な行動をさせることが可能です。これは多態性というものにもつながります。今は継承クラスがBという一つしかないためメリットがわかりにくいですが、これがC、Dというように種類が増えるとその便利さがわかります。
オーバーロードは継承とは無関係です。基本的に1つのクラスで同名のメソッドは1つしか宣言できないのですが、引数の数や種類を異なるものにすれば複数宣言できます。これがオーバーロードです。
java
1class A {
2 public void hoge() {
3 System.out.println("A");
4 }
5
6 public void hoge(int i) {
7 System.out.println("A: " + i);
8 }
9}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。