日期:2014-05-20  浏览次数:20789 次

//请大家帮我看一下两者之间的区别何在?
//有人说:第一个程序会先产生A对象
class   A
{
public   static   void   main(String   args[])
{
      A   x=new   B();
}
}
class   B   extends   A
{

}
//有人说:第二个程序会先产生B对象
class   A
{
public   static   void   main(String   args[])
{
      A   x=new   B();
}
}
class   B   extends   A
{

}

请问一下,他们谁说的对啊?正确的应当是什么样的啊?

------解决方案--------------------
构造函数的调用顺序应该是先子类 后父类吧
随便猜的啊 不一定准
------解决方案--------------------
这应该不是什么先后的问题,要是应要说先后,那应该是先A,因为B无构造函数,因此实例化对象时B会调用A的默认构造函数(即无参构造函数)因此,因该是类似于A x =new A();来实例化x对象,因此x是A的实例,又是B的实例
------解决方案--------------------
朋友你给的两个程序不是一样的吗 难道我眼花了 没看出来有什么 不同啊

A x=new B();
A 是B 的父类
在产生B对象是就要先调用A的相应的构造方法产生A 然后再调用B的构造方法
你给的代码中没有写构造方法所以编译器会自动给你添加一个没有参数的构造方法
所以 第一个程序会先产生A对象
然后在产生B对象
如果想了解的更透彻的话还是不代码如何在内存中运行搞清楚比较好