本帖最后由 王桂丽 于 2012-8-6 22:00 编辑
class Fu//定义父类,父类里有一个成员变量num=5,还有一个静态方法method1,一个成员函数method2
{
int num=5;
static void method1()
{
System.out.println("Fu method_1");
}
void method2()
{
System.out.println("Fu method_2");
}
}
class Zi extends Fu//定义子类,父类里有一个成员变量num=8,还有一个静态方法method1,一个成员函数method2。并继承父类
{
int num=8;
static void method1()
{
System.out.println("Zi method_1");
}
void method2()
{
System.out.println("Zi method_2");
}
}
class ExtendsDemo
{
public static void main(String[] args)
{
Fu f=new Fu();//创建父类对象并调用起方法
{
System.out.println(f.num);//5
f.method1();//Fu method_1
f.method2();//Fu method_2
}
Fu z=new Zi();//建立子类对象并调用方法
{
System.out.println(f.num);//5
f.method1();//Fu method_1
f.method2();//Zi method_2
System.out.println(z.num);//8
z.method1();//Zi method_1
z.method2();//Zi method_2
}
}
}
根据: 1)在多态中成员函数的特点: 在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。 在运行时期:参阅对象所属的类中是否有调用的方法。 简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。 2)在多态中,成员变量的特点: 无论编译和运行,都参考左边(引用型变量所属的类) 3)在多态中,静态成员函数的特点; 无论编译和运行,都参考左边
我可以知道运行的结果,我想知道的是代码在内存中是怎样分配的?即各变量与方法在栈、堆、方法区的体现形式。
还有,代码倒数第三行,为什么运行的结果会是5,而不是所说的8呢?是哪里出了问题? |