问题描述
下面从书上截了一段下来,没看懂为什么super和this都是指代的Employee,,publicclassCloneTest{publicstaticvoidmain(String[]args){try{Employeeoriginal=newEmployee("Tom",100);}catch(CloneNotSupportedExceptione){e.printStackTrace();}}}publicclassEmployeeimplementsCloneable{privateStringname;privatedoublesalary;privateDatehireDay;publicEmployee(Stringn,doubles){name=n;salary=s;hireDay=newDate();}publicEmployeeclone()throwsCloneNotSupportedException{System.out.println(super.getClass().getName());-----这里输出为EmployeeSystem.out.println(this.getClass().getName());-----这里输出也为EmployeeEmployeecloned=(Employee)super.clone();returncloned;}
解决方案
解决方案二:
getClass是非覆盖式的从Object继承来的,Object的getClass()方法的释义是:返回此Object的运行时类。返回的Class对象是由所表示类的staticsynchronized方法锁定的对象。/***Returnstheruntimeclassofthis{@codeObject}.Thereturned*{@codeClass}objectistheobjectthatislockedby{@code*staticsynchronized}methodsoftherepresentedclass.**/释义指出,要返回此Object运行时类,这当然不可能指Object自己了,否则所有类调用getClass()方法都返回Object.class了。那到底谁是Object的运行时类呢,不是Object自己,当然就只能是他的儿子、或各种孙子了。这里就是Employee了(无论是用super.getClass()还是this.getClass())。如果想要从Employee中得到Object.class,可以用this.getClass().getSuperclass();
解决方案三:
getClass()表示此对象运行时类的Class对象。所以楼主super.getClass().getName()和this.getClass().getName()都是返回到Employee