次のようなことをした場合、これは実際にはオーバーロードとオーバーライドに依存します。
public class Animal{}
public class Dog extends Animal{}
public class AnimalActivity{
public void eat(Animal a){
System.out.println("Animal is eating");
}
public void eat(Dog d){
System.out.println("Dog is eating");
}
}
次にメインクラスで:
public static void main(String args[])
{
Animal a=new Animal();
Animal d=new Dog();
AnimalActivity aa=new AnimalActivity();
aa.eat(a);
aa.eat(d);
}
2 つの場合の結果は次のようになります。Animal is eating
しかし、少しひねってみましょう。これを持ってみましょう:
public class Animal{
public void eat(){
System.out.println("Animal is eating");
}
}
それから:
public class Dog extends Animal{
public void eat(){
System.out.println("Dog is eating");
}
}
次にメインクラスで:
public static void main(String args[]){
Animal d=new Dog();
Animal a=new Animal();
a.eat();
d.eat();
}
結果は次のようになります。
Animal is eating
Dog is eating
これは、コンパイル時にバインドをオーバーロードする「静的バインディング」が、実行時にバインドをオーバーライドする「動的バインディング」であるためです。