abstract class Fu
{
private String name;
abstract void work();
Fu(String name)
{
this.name=name;
}
}class Z1 extends Fu
{
Z1(String name)
{
super(name);
}
void work()
{
....
}
}class Z2 extends Fu
{
Z2(String name)
{
super(name);
}
void work()
{
....
}
}
class Main
{
main(String [] args)
{
Z1 a=new Z1("z1");
Z2 b=new Z2("z2");
}
}
上面是一段伪代码,我的问题是父类是一个抽象类,肯定不能被实例化,里面有个私有成员变量,肯定不能被子类继承到,那么,按照我的理解,内存里面就只有一个name变量(除了形参name)。但是这个程序中“z1”和“z2”却是同时存在于内存中的,我推断的就是z2会覆盖z1,我知道肯定内存中不会用一个name同时指向两个字符串值,我就弄不明白为什么会出现两个name引用呢?请高手帮我画出内存分配图。对了,构造函数是用来初始化对象的把。跪谢!!!!
{
private String name;
abstract void work();
Fu(String name)
{
this.name=name;
}
}class Z1 extends Fu
{
Z1(String name)
{
super(name);
}
void work()
{
....
}
}class Z2 extends Fu
{
Z2(String name)
{
super(name);
}
void work()
{
....
}
}
class Main
{
main(String [] args)
{
Z1 a=new Z1("z1");
Z2 b=new Z2("z2");
}
}
上面是一段伪代码,我的问题是父类是一个抽象类,肯定不能被实例化,里面有个私有成员变量,肯定不能被子类继承到,那么,按照我的理解,内存里面就只有一个name变量(除了形参name)。但是这个程序中“z1”和“z2”却是同时存在于内存中的,我推断的就是z2会覆盖z1,我知道肯定内存中不会用一个name同时指向两个字符串值,我就弄不明白为什么会出现两个name引用呢?请高手帮我画出内存分配图。对了,构造函数是用来初始化对象的把。跪谢!!!!
解决方案 »
- 面试:spring怎样进行事务处理??????????????????????????????????????????????
- struts2 select
- 初学hibernate,一个异常总是解决不了
- 为什么eWebEditor不能手动换行??
- servlet中两个重要的组件有什么?分别做什么来用?这是今天的一个面试题
- EJB+weblogic+sqlserver2000的问题!!!
- STRUTS高手们进来帮帮我!!!!!!!!!!!!!!!!!!!!!!!感谢感谢
- 请问java中有这样的函数吗?
- 怎样用Java 语言来产生柱形图样?使用来显示某些百分比值!
- 请问有人在eclipse中使用ant遇到这样的怪问题吗?
- 如何在OA系统中设置可动流程?
- Silverlight跨域访问Weblogic上部署的WebService发生问题
Z2和Z1是不同的对象,虽然都从一个父类里继承出来,但系统会给它们分别分配内存空间,何以”z2会覆盖z1“呢?
哪怕是
Z1 a=new Z1("z1");
Z1 b=new Z1("z1");这样看起来几乎一模一样的代码, 也一样是有两块内存空间的.