class Super{
	
	public static void smethod(){
		System.out.println("super smethod!");
	}
	
	public static void stest(){
		System.out.println("super test!");
	}
	
	public void test(){
		System.out.println("super test!");
	}
	public void test(int i){
		System.out.println("super test i:"+i);
	}
}

class Sub extends Super{
	
	//重写或覆盖父类方法,
	//不管使用父类引用还是子类引用调用test()
	//都是调用此方法
	public void test(){
		
		System.out.println("sub test!");
	}
	//重载test方法
	public void test(String info){
		System.out.println(info);
	}
	//隐藏父类stest方法
	//使用子类引用调用stest(),则调用这里
	//父类引用调用stest(),则调用父类方法;
	public static void stest(){
		System.out.println("sub test!");
	}
}

public class SynchronizedTest {
	
	public static void main(String[] args) {
		
		Sub sub = new Sub();
		sub.test();//重写或覆盖,调用子类实现
		Super super1 = sub;
		super1.test();//重写或覆盖,调用子类实现

		//重载
		sub.test(100);
		sub.test("overload");
		
		//sub.stest();
		 
		sub.stest(); //子类中隐藏,依赖于引用类型,只能调用子类实现;
		super1.stest();//子类中隐藏,依赖于引用类型,调用父类实现;
		sub.smethod();//没有隐藏,调用父类实现;
		super1.smethod();//没有隐藏,调用父类实现;
		
	}

}


本文转载:CSDN博客