迷糊了,一个简单的问题
两端代码,第一段代码如下: 
 class   Father   {   
 public   Father()   {   
 } 
 public   void   shout(Object   word){ 
 System.out.println( "object   father   shout: "+word); 
 }   
 }   
 class   Son   extends   Father{   
 public   Son()   {   
 } 
 public   void   shout(String   word){ 
 System.out.println( "string   son   shout: "+word); 
 }     
 }   
 public   class   Dan{ 
 	public   static   void   main(String[]   args){ 
 		Son   son=new   Son(); 
 		Father   father=son; 
 		son.shout( "hello "); 
 		father.shout( "hello "); 
 	} 
 } 
 这段代码的输出结果是: 
 string   son   shout:hello 
 object   father   shout:hello   
 第二段代码,代码如下: 
 public   class   Demo{  	 
 	      public   static   void   main(String[]   args){ 
 	      	Professor   p=new   Professor(); 
 	      	Teacher   t=p; 
 	      	System.out.println   (t.Teaching( "数学 ")); 
 	      	System.out.println   (p.Teaching( "语文 ")); 
 	      } 
 }      
 class   Teacher{ 
 	protected   String   name; 
 	public   Teacher(){ 
 	}  	 
 	public   String   Teaching(String   className){ 
 		return    "正在教小学 "+className; 
 	}  	 
 }   
 class   Professor   extends   Teacher{ 
 	public   Professor(){ 
 	}  	 
 	public   String   Teaching(String   className){ 
 		return    "正在教大学 "+className; 
 	} 
 } 
 输出结果如下: 
 正在教大学数学 
 正在教大学语文   
 问题: 
 father.shout( "hello ");执行的时候是执行Father的shout方法,而第二段代码t.Teaching( "数学 ")为什么执行的不是Teacher的Teaching方法?
------解决方案--------------------Professor p=new Professor(); 
   Teacher t=p;     
  t表示的是一个Professor类对象的引用,当然调用Professor的Teaching方法了
------解决方案--------------------两个方法的参数不一样。后面的参数是一样的,前面的不一样的
------解决方案--------------------也就是说,Teacher父类对象t 是 Professor子类对象p的上转型对象, 
 上转型对象不能操作子类新增的成员变量和方法,但可以操作子类对象继承或重写的方法, 
 如果子类重写了父类的某个方法, 
 上转型对象调用方法时,一定调用的是这个重写的方法 
 明白了吧?   
------解决方案--------------------子类重写父类的方法的前提是:方法名一样,参数类型和个数一样. 
 对于楼主的问题,前面一个是因为参数类型不一样,而并没有重写,所以用父类和子类的引用来调方法时是调用的两个方法, 后面那个是参数类型和个数完全一样,所以是子类重写了父类的方法,用父类和子类的引用去调,最后都是调的子类重写后的方法.
------解决方案--------------------请查阅“多态”。