class A
{
public A()
{
printFields();
}
public void printFields()
{
}
}public class B extends A
{
int x=1;
int y;
public B()
{
y=-1;
}
public void printFields()
{
System.out.println("x="+x+",y="+y);
}
public static void main(String[] args)
{
new B();
}
}
//在eclipse中输出为x=0,y=0 为什么不是x=1,y=0?
//我把这个题改变成C#后,在vs2005中输出为x=1,y=0,我以前总以为java和C#是一样的,但现在看来好像不一样!
//改遍后的C#如下:
using System;
class A
{
public A(){
PrintFields();
}
public virtual void PrintFields(){}
}
class B : A
{
int x = 1;
int y;
public B()
{
y = -1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
} public static void Main()
{
new B();
}
}
{
public A()
{
printFields();
}
public void printFields()
{
}
}public class B extends A
{
int x=1;
int y;
public B()
{
y=-1;
}
public void printFields()
{
System.out.println("x="+x+",y="+y);
}
public static void main(String[] args)
{
new B();
}
}
//在eclipse中输出为x=0,y=0 为什么不是x=1,y=0?
//我把这个题改变成C#后,在vs2005中输出为x=1,y=0,我以前总以为java和C#是一样的,但现在看来好像不一样!
//改遍后的C#如下:
using System;
class A
{
public A(){
PrintFields();
}
public virtual void PrintFields(){}
}
class B : A
{
int x = 1;
int y;
public B()
{
y = -1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
} public static void Main()
{
new B();
}
}
解决方案 »
- java 如何知道函数返回的数组的元素个数
- java上传mp4格式
- 取值问题。。。。
- 跪求大侠请救,我的程序为什么不能查询,我绞尽脑汁而不得其解,我要疯了...
- 能解决一下从键盘上输入字符读入数组中的Applaction 程序吗?
- java Substring 问题
- java中读写文件的例子?
- 100分,求一个局域网中点对点的文件传输程序(源代码),UP有分!
- 调查!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 一些空间厂商的CGI程序可以在线、即时开通注册域名或空间...Apache上比较好弄...可是在IIS上如何实现?
- 这程序哪里错 了
- java开发网站用一套什么工具(学生做,不需要太复杂,也不要过简单。)
如果在class A修改成下面
class A
{
public A()
{
printFields();
} public void printFields()
{
System.out.println("a");
}
}
程序还是不会调用 classA的printFields() 而是classB的printFields()
也就是说在构造父类时构造函数内部this是子类B的为什么啊?
初始化,在这个过程中,首先完成对基类的成员初始化然后才是B类自己的成员初始化,初始化过程中,
无论你在成员变量处指定任何值,JAVA都会赋给各成员变量默认的初始值,对于数值类型就是0,对于
引用就是NULL,所以初始化完毕,x=0,y=0
然后再调用基类的构造器,但在A类的构造器中调用了printFields(),而B类也有一个printFields(),
它覆盖了A类的printFields(),由于多态的原因,所以JAVA调用B类的printFields(),所以输出x=0,y=0。
在从A类构造器返回到B类构造器的时候,情况有些改变,x值此时由0变成1,说明你在定义变量x时所赋的
初值在此时起了作用,再次输出x=1,y=0。修改后的程序如下,只是在B的构造函数里增加了一条输出语句
class A
{
public A()
{
printFields();
} public void printFields()
{ }
}public class B extends A
{
int x = 1;
int y;
public B()
{
System.out.println("x=" + x + ",y=" + y);
y = -1;
} public void printFields()
{
System.out.println("x=" + x + ",y=" + y);
} public static void main(String[] args)
{
B b=new B();
System.out.println("x="+b.x+",y="+b.y);
}
}