为什么下列程序中,当执行完 A a=new B();B b=(B)a;后,a指向什么?是哪个类的对象引用?为什么a.g();出错?
class A
{
A(){System.out.println("A()");}
void f(){System.out.println("A.f()");}
}class B extends A
{
void f(){System.out.println("B.f()");}
void g(){System.out.println("B.g()");}

public static void main(String[] aa)
{
A a=new B();
B b=(B)a;
System.out.println( a instanceof B);//true
a.f();
b.f();
a.g();//为什么出错?a此是指向什么?
}
}

解决方案 »

  1.   

    A a=new B();这句话其实是声明了A的构造,但是是B的引用构造部分决定了调用的入口,入口不存在,怎么能够引用了,不推荐这样引用,可以考虑使用虚类 或 接口来做
      

  2.   

    a的引用指向class A的,肯定a.g()报错啊!
      

  3.   

    其实看整个main函数,只有A a=new B();对变量a赋值,其余的代码都不可能影响到a,所以,a指向b的引用.