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

关于多态中成员变量的变化
class Fu{
int num = 5;
void show(){
System.out.println("Fu show "+this.num);
}
}
class Zi extends Fu{
int num = 6;
}

public class Test {
public static void main(String[] args) {
Fu f = new Zi();
f.show();

}
}
我想问System.out.println("Fu show "+this.num);中的this为什么指向的是Fu类对象呢,运行的时候不是把Fu类的方法继承过来的嘛!

------解决方案--------------------
this指当前对象,应该是输出5吧;
------解决方案--------------------
引用:
Fu f = new Zi();不是通过父类引用指向子类对象吗?如果是5的话不就是父类的对象了吗?

f的确是父类引用指向子类对象;
class Fu
{
int num = 5;

void show() //第三步,打印,this,指的是当前对象Fu
{
System.out.println("Fu show " + this.num);
}
}

class Zi extends Fu
{
int num = 6;
}

public class Test
{
public static void main(String[] args)
{
Fu f = new Zi();//第一步,调用构造方法,没有,默认;
f.show();//第二步,调用f的show方法,但Zi本身没有重写Fu的show方法,所以调用Fu的show方法,这是继承;

}
}

------解决方案--------------------
引用:
这时会有Fu类对象吗,不是只创建了子类对象吗

创建子类对象前,会先创建父类对象

class Fu {
Fu() {
System.out.println("创建父类对象");
}
}

class Zi extends Fu {
Zi() {
super();  //这句话省不省略,输出结果都一样,省略了,JVM会自动给你加上;子类构造时,会首先调用父类的构造函数
System.out.println("创建子类对象");
}
}

public class test {
public static void main(String[] args) {
Fu f = new Zi();
}
}

------解决方案--------------------
引用:
Quote: 引用:

这时会有Fu类对象吗,不是只创建了子类对象吗

创建子类对象前,会先创建父类对象

class Fu {
Fu() {
System.out.println("创建父类对象");
}
}

class Zi extends Fu {
Zi() {
super();  //这句话省不省略,输出结果都一样,省略了,JVM会自动给你加上;子类构造时,会首先调用父类的构造函数
System.out.println("创建子类对象");
}
}

public class test {
public static void main(String[] args) {
Fu f = new Zi();
}
}


输出为:

创建父类对象
创建子类对象