Here are two class: Animal and Dog, Dog extends from Animal:
package scjp.liguoliang.com;
public class Animal {
private String type = "Dog";
public String name = "Animal";
public String getType() {
return type;
}
public void eat() {
System.out.println(name + ", Animal eat...");
}
}
package scjp.liguoliang.com;
public class Dog extends Animal {
private String type = "Dog";
public String name = "Dog";
public String getType() {
return type;
}
public void eat() {
System.out.println(name + ", Dog eat...");
}
}
And here is the test codes:
public static void main(String[] args) {
Dog dog = new Dog();
Animal animalDog = new Dog(); // New dog, but type is Animal.
System.out.println(dog.name);
System.out.println(dog.getType());
dog.eat();
System.out.println(animalDog.name);
System.out.println(animalDog.getType());
animalDog.eat();
System.out.println("\nWe are going to test overloading:");
OverLoadingTest overLoadingTest = new OverLoadingTest();
overLoadingTest.testEat(animalDog);
overLoadingTest.testEat(dog);
}
public void testEat(Animal animal) {
System.out.println("Test Animal eat");
}
public void testEat(Dog dog) {
System.out.println("Test Dog eat");
}
Here is the output:
Dog
Dog
Dog, Dog eat...
Animal // Get the property by reference Type, so print the name of ‘Animal’
Dog // Polymorphism, call the method of the instance in run time;
Dog, Dog eat...
We are going to test overloading:
Test Animal eat // Compiler will decide which method will be called by reference type when compiling.
Test Dog eat
In summary:
1. overriding: Polymorphism is for instance method, so an animal type reference to a dog Object will call dog’s method; but for properties, will use animals.
2. overloading: which method will be called has been determined when compiling by the reference type.