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.
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.