//程序中这种用法第一次看到,请问各位碰到过吗?
public   class   Person4 
 { 
 static   int   count=0; 
 protected   String   name; 
 protected   int   age; 
 public   Person4(String   n1,int   a1) 
 { 
 this.name=n1; 
 this.age=a1; 
 this.count++; 
 } 
 public   int   olderthen(Person4   b)//第一个注释; 
 { 
 Person4   a=this; 
 return   a.age-b.age; 
 } 
 public   void   print() 
 { 
 System.out.print(this.getClass().getName()+    "    "); 
 System.out.print( "count= "+this.count+ "    "); 
 System.out.println( "    "+this.name+ ", "+this.age);    
 } 
 } 
 class   Student4   extends   Person4 
             { 
 protected   String   dept; 
 Student4(String   n1,int   a1,String   d1) 
 { 
 super(n1,a1); 
 dept=d1; 
 } 
 public   static   void   main(String   args[]) 
 { 
 Person4   p1=new   Person4( "李大广 ",21); 
 p1.print(); 
 Student4   s1=new   Student4( "陈小瑞 ",19, "计算机系 "); 
 s1.print(); 
 System.out.println( "年龄差=    "   +   p1.olderthen(s1));//第二个注释 
             } 
    } 
 /**************************************************************** 
 请问p1.olerthen(s1)传过去的是什么,是否是一个类实例 
 public   int   olderthen(Person4   b)接收的是什么?接收之后的b.age是谁的类呢? 
 这种用法第一次看到请高手指教. 
 *******************************************************************/
------解决方案--------------------传过去的是一个实例, 
 接收的是一个Student4对象,也是Person4对象,因为了Student4继承了Person4 
 b.age是Person4是的
------解决方案--------------------一般认为java中是引用传递,即传递过去的是对象的地址,也有部分专家认为实际上传递的是引用的副本,即拷贝了一份这个引用,即同时有两个引用指向这个对象,而在方法中操作的实际就是这个对象.   
 后面一个问题,首先,Student4继承了Person4,那么在方法olderthen(Person4 b)中如果传递的是Student4的实例,是完全可以的,因为父类的引用可以指向子类的实例,所以在传递后,Student4的实例会自动向上转型为Person4类型,但如果在这个方法里使用 
   System.out.println(this.dept); 
 就不行了, 因为父类中没有这个属性,只有子类中才有,必须先转回子类的类型
------解决方案--------------------mark 
------解决方案--------------------关注