Overloading method will be determined by reference type, but override method will be determined by the actual object tyep.
property is determined by reference type too.
package newjob.guoliang.corejava; public class ReferenceTypeTest { public static void main(String[] args) { AClass a = new BClass(); new ReferenceTypeTest().printClassDesc(a); } protected void printClassDesc(AClass a) { System.out.println("A_" + a.desc); } protected void printClassDesc(BClass b) { System.out.println("B_" + b.desc); } } class AClass { String desc = "ClassA"; } class BClass extends AClass{ String desc = "ClassB"; }
Output is:
A_ClassA
MethodClassB_ClassB
Static block / variable;
Instance block / variable;
Constructor;
public class StaticTest { public static void main(String[] args) { // System.out.println(B.a); // System.out.println(C.c); StaticTest staticTest = new StaticTest(); staticTest.printName(); } static { System.out.println("Static_block_Main"); } public StaticTest() { System.out.println("Consturctor_Main"); } private void printName() { System.out.println("InstanceMethod"); } { System.out.println("Instance_block_Main"); } }
Output is:
Static_block_Main
Instance_block_Main
Consturctor_Main
InstanceMethod
Pension – 养老保险
Unemployment Insurance 失业保险
Medical Insurance医疗保险
Housing Fund 住房公积金
package scjp.liguoliang.com; /** * I'm try to see the static block run rules, * B extends A, A has a static a, when we use B.a, class B did not loaed, just Class A loaded. * If B also has a static a, A and B will be loaded. * If a is finle, A and B will not be loaded both. * @author Li Guoliang * */ public class TestClassLoading { public static void main(String[] args) { System.out.println(B.a); System.out.println(C.c); } } class A { static String a = "A.a"; // how about if this is final static { System.out.println("Static_A_Class"); } { System.out.println("Instance_A"); } } class B extends A{ // static String a = "B.a"; static { System.out.println("Static_B_Class"); } } /** * This class is designed for test the squence of static variable and block. * They run by the sequence of the code. * @author Li Guoliang * */ class C { static { System.out.println("Static_C"); } static C c = new C(); public C() { System.out.println("Constructor_C"); } }
Output
Static_A_Class
A.a
Static_C
Constructor_C
scjp.liguoliang.com.C@161f10f
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,.