class A
{
public int x=20;
public A(){}
public A(int x)
{
this.x=x;
}
public int getX()
{
return x;
}
public void setX(int a)
{
x=a;
}
}
class B extends A
{
private int y=10;
public B(){}
public B(int y)
{
this.y=y;
}
public int getX()
{
return y;
}
public void setX(int a)
{
y=a;
}
}
public class Test3
{
public static void main(String args[])
{
A a=new A(5);
B b=new B(15);
System.out.println(a.x);
a=b;
System.out.println(a.x);
}
}
为什么会输出这样的结果
{
public int x=20;
public A(){}
public A(int x)
{
this.x=x;
}
public int getX()
{
return x;
}
public void setX(int a)
{
x=a;
}
}
class B extends A
{
private int y=10;
public B(){}
public B(int y)
{
this.y=y;
}
public int getX()
{
return y;
}
public void setX(int a)
{
y=a;
}
}
public class Test3
{
public static void main(String args[])
{
A a=new A(5);
B b=new B(15);
System.out.println(a.x);
a=b;
System.out.println(a.x);
}
}
为什么会输出这样的结果
A a=new A(5); //调用public A(int x)
B b=new B(15); //先调用父类public A(){} ,再调用public B(int y)
System.out.println(a.x);
a=b; //A类的引用a指向b
System.out.println(a.x); //输出A引用的默认属性20
new B时调用A的默认构造函数,故x等于默认值20
第一个构造器改变x的值为5
第二个a.x的x是B继承A的x(相当于b.x),故为默认值20,
{
public static int x=20;
public A(){}
public A(int x)
{
this.x=x;
}
public int getX()
{
return x;
}
public void setX(int a)
{
x=a;
}
}
class B extends A
{
private static int y=10;
public B(){}
public B(int y)
{
this.y=y;
}
public int getX()
{
return y;
}
public void setX(int a)
{
y=a;
}
}
public class Test3
{
public static void main(String args[])
{
A a=new A(5);
B b=new B(15);
System.out.println(a.x);
a=b;
System.out.println(a.x);
}
}
对比一下我发的题目,希望有人能给我个详细的讲解谢谢
class A {
//声明成员变量x,初始化为20
public int x = 20;
//无参构造函数
public A() {
} //有一个参数的构造函数
public A(int x) {
this.x = x; //对成员变量x赋值
} //得到成员变量x
public int getX() {
return x;
} //设置成员变量x为a
public void setX(int a) {
x = a;
}
}
//类B继承A
class B extends A {
//声明成员变量y,初始化为10
private int y = 10; //无参构造器
public B() {
} //有一个参数的构造器
public B(int y) {
this.y = y;
} //得到y
public int getX() {
return y;
} //设置y值
public void setX(int a) {
y = a;
}
}public class Test3 { public static void main(String args[]) {
A a = new A(5); //声明A引用a指向A(5)
B b = new B(15); //声明B引用b指向B(15)
System.out.println(a.x); //输出 a中x的值
a = b; //把子b引用赋于a,所以a指向B(15)
System.out.println(a.x); //输出B(15)中的x,初始值是20,所以输出20
}
}
class A
{
public int x=20;
public A(){}
public A(int x)
{
this.x=x;
}
public int getX()
{
return x;
}
public void setX(int a)
{
x=a;
}
}
class B extends A
{
private int y=10;
public B(){}
public B(int y)
{
this.y=y;
}
public int getX()
{
return y;
}
public void setX(int a)
{
y=a;
}
}
public class Test3
{
public static void main(String args[])
{
A a=new A(5);
B b=new B(15);
System.out.println(a.x);
a=b;
System.out.println(a.x);
}
}
[/Java code]
[code]
public static void main(String args[])
{
A a=new A(5);
B b=new B(15);
System.out.println(a.x);
a=b;
System.out.println(a.x); [/code]
public static void main(String args[])
{
A a=new A(5);
B b=new B(15);
System.out.println(a.x);
a=b;
System.out.println(a.x);
}