今天去一家外企的面试题.....
首先问了我这么一段程序,让我写出它的输出,当然,这个没啥问题
// codes start
class base{//a base class
// constructor
public base(){
System.out.println("base class construct");
}
// perform
public void perform(){
System.out.println("base class perform");
}
}
class subbase extends base{// derive from base
// constructor
public subbase(){
System.out.println("sub class construct");
}
// perform
public void perform(){
System.out.println("sub class perform");
}
}
public class casting{// test casting class
// constructor
public casting(){
System.out.println("begin casting test");
}
public static void main(String args[]){
base father = new base();
subbase son = new subbase();
father = (base)son; // <1>
father.perform();
son = (subbase)father; // <2>
son.perform();
father = (base)((subbase)father); // <3>
father.perform();
}
}
// codes end
************************************************** *
and the execution result is:
// begin
base class construct
base class construct
sub class construct
sub class perform // <a>
sub class perform // <b>
sub class perform // <c>
// end
************************************************** **
然后就写了,然后他问为啥,俺就答啊,无非就是一个引用的问题嘛,他老人家还挺高兴,无奈笑里藏刀,马上又问了一个问题,
((base)new subbase()).perform();
这个语句没有啥引用了吧,你说说为啥也输出 sub class perform 啊?
我当时傻眼了,现在还傻呢
也是 new 关键字就是产生对象用的,莫非是java虚拟机内部的事情?
请诸位帮忙给个解答,然后我就找块最大的豆腐撞死算了.........