Java 隐藏和覆盖间的区别

 class Animal
{
	 public static void textClassMethod()
	   {
		   System.out.println("Animal中的类方法");
	   }	
	 public void textinstanceMethod()
	 {
		 
		 System.out.println("Animal中的实例方法");
	 }
}
 class Cat extends Animal
 {
	 public static void textClassMethod()
	   {
		   System.out.println("Cat中的类方法");
	   }	
	 public void textinstanceMethod()
	 {
		 
		 System.out.println("Cat中的实例方法");
	 }
	 
 }
 /*  * 隐藏:如果一个子类定义了一个类方法(静态方法),而这个类与其超类的一个类方法
  * 具有相同的签名(指名称、参数个数、类型)和返回类型
  * 1》当调用隐藏方法时,根据引用变量的声明类型来决定调用调用超类还是子类中的静态方法
  * 如果声明的对象是超类,即使它实际指向的是子类,也调用超类的静态方法。
  * 2》当调用覆盖方法时,则根据实际指向对象的类型来决定
  * 调用超类还是子类的实例方法
  * 
  */
public class hh {
  public static void main(String[]args)
  {
	 Cat myCat=new Cat();
	 Animal myAnimal=myCat;
	 Animal.textClassMethod();
	 myAnimal.textClassMethod();
	 myCat.textClassMethod();
	 
	 myAnimal.textinstanceMethod();
	 myCat.textinstanceMethod();
	 
	 
  }
}
在子类中被重写的方法,起访问权限允许大于但不允许小于被其覆盖的方法,。不允许将超类的一个实例(static)方法在子类中改变为类方法
否则讲产生一个编译错误
posted @ 2011-07-09 16:11  又是一年夏天  阅读(623)  评论(0)    收藏  举报