为什么被转换为父类类型的对象(会有对象切割,包括方法和属性),在重新转化为本类后,那些被切掉的东西又available了?
public class objectConvert {
private String mSig;
public void set(String ipStr)
{
mSig = ipStr;
}
public void echo(){
System.out.println("*** method echo of class objectConvert:(" + mSig +") ***");
}
public static void main(String args[])
{
System.out.println("*** start ***");
objectConvert obj1 =new objectConvert();
obj1.set("Hello World");
obj1.echo();
System.out.println(obj1.hashCode());
Object obj2 = (Object)obj1;
// obj2.echo();
System.out.println(obj2.hashCode());
objectConvert obj3=(objectConvert)obj2;
obj3.set("After convert");
obj3.echo();
System.out.println(obj3.hashCode());
}
}
运行结果:
*** start ***
*** method echo of class objectConvert:(Hello World) ***
278058706
278058706
*** method echo of class objectConvert:(After convert) ***
278058706
Process finished with exit code 0
看来虽然被切割了,但对象obj1仍然在那里。由此可见,方法是否可以被调用,属性是否可以被访问,是语言语义上的规范。 唯此可以遥寄真解了。