Overloading and overriding method call

Categories: Java; Tagged with: ; @ May 15th, 2012 21:11

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

Java method invoked sequence

Categories: Java; Tagged with: ; @ May 15th, 2012 20:51

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

养老保险、医疗保险、失业保险,住房公积金翻译

Categories: 分享 May 15th, 2012 20:34

Pension – 养老保险
Unemployment Insurance 失业保险
Medical Insurance医疗保险
Housing Fund 住房公积金

 

About Java static block

Categories: Java; Tagged with: ; @ May 15th, 2012 0:06
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

Which method will be called? about Overriding and Overloading in Java

Categories: Java; Tagged with: ; @ May 13th, 2012 15:02

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.

Newer Posts <-> Older Posts



// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.