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);
}
}
为什么会输出这样的结果

解决方案 »

  1.   


    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
      

  2.   

    a=b;a引用指向b引用指向的对象
    new B时调用A的默认构造函数,故x等于默认值20
    第一个构造器改变x的值为5
    第二个a.x的x是B继承A的x(相当于b.x),故为默认值20,
      

  3.   

    当B b=new B(15); 时,他会去查看B是否有继承相应的类,如果有,就会先执行父类的无参构造器(当然A类里的一些方法,属性都被继承到B了),而在A类里的public int x=20; 在执行中没被改变过(运行new B(15)时),所以就还是20了
      

  4.   

    class A
    {
    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);
    }
    }
    对比一下我发的题目,希望有人能给我个详细的讲解谢谢
      

  5.   

    2F和3F讲的很详细了啊,LZ到底哪里不明白?
      

  6.   

    多加了个static 你主要还想要了解什么呢。答案是:5,5
      

  7.   

    //类A声明
    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
    }
    }
      

  8.   

    [Java code]
    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]
      

  9.   

    怎么才能把回复代码放进框中?
    [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]
      

  10.   

    [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);