当前位置: 代码迷 >> Java相关 >> 一个小程序出错了
  详细解决方案

一个小程序出错了

热度:179   发布时间:2010-04-21 22:05:35.0
一个小程序出错了
class L
{
    int a,b ;
    L(int a,int b)
    {
        this.a=a;
        this.b=b;
    }
   void     print()
    {
        System.out.println(a+" "+b);
    }
}
class H extends L
{
    int x,y,z;
    H(int x,int y,int z)
    {
        super(x,y);
        this.z=z;
    }
  public     void print()
    {
        System.out.println("x="+x+" "+"y="+y+" "+"z="+z);
    }
}
public class Z
{
    public static void main(String args[])
    {
        H real=new H(6,7,8);
        real.print();
    }
}
结果咋不对啊!!刚学Java,请大家帮忙看看!!!
----------------解决方案--------------------------------------------------------
运行结果:
x=0 y=0 z=8

有什么问题了?
----------------解决方案--------------------------------------------------------
class L
{
    int a,b ;
    L(int a,int b)
    {
        this.a=a;
        this.b=b;
    }
   void     print()
    {
        System.out.println(a+" "+b);
    }
}
class H extends L
{
    int x,y,z;
    H(int x,int y,int z)
    {
        super(x,y);
        this.z=z;
    }
  public     void print()
    {
        System.out.println("x="+x+" "+"y="+y+" "+"z="+z);
    }
}
public class Z                 Z没有定义。呵呵呵 ,修改一下!!!
{         
    public static void main(String args[])
    {
        H real=new H(6,7,8);
        real.print();
    }
}

----------------解决方案--------------------------------------------------------
H(int x,int y,int z)
    {
        super(x,y);
        this.z=z;
    }
因为H继承了L,所以H有a,b的属性。而super(x,y);就是把a=x;b=y;
所以H的x,y没有被赋值,所以为0.如果要输出6,7,8应该改成

public     void print()
    {
        System.out.println("x="+a+" "+"y="+b+" "+"z="+z);
    }

----------------解决方案--------------------------------------------------------
以下是引用MyStar在2010-4-21 22:05:35的发言:

class L
{
    int a,b ;
    L(int a,int b)
    {
        this.a=a;
        this.b=b;
    }
   void     print()
    {
        System.out.println(a+" "+b);
    }
}
class H extends L
{
    int x,y,z;
    H(int x,int y,int z)
    {
        super(x,y);
        this.z=z;
    }
  public     void print()
    {
        System.out.println("x="+x+" "+"y="+y+" "+"z="+z);
    }
}
public class Z
{
    public static void main(String args[])
    {
        H real=new H(6,7,8);
        real.print();
    }
}
结果咋不对啊!!刚学Java,请大家帮忙看看!!!
不要起重复的变量名,因为属性x,y不是父类的属性,super(x,y); 只是对父类的属性a,b赋值,而子类的x,y仍是默认值0
----------------解决方案--------------------------------------------------------
回复 5楼 lampeter123
那怎么给x,y赋值啊?
----------------解决方案--------------------------------------------------------
以下是引用MyStar在2010-4-22 12:06:39的发言:

那怎么给x,y赋值啊?
class L //将父类的a,b 改为x,y
{
    int x,y ;
    L(int x,int y)
    {
        this.x=x;
        this.y=y;
    }
   void     print()
    {
        System.out.println(x+" "+y);
    }
}
class H extends L
{
    int z;
    H(int x,int y,int z)
    {
        super(x,y);
        this.z=z;
    }
  public     void print()
    {
        System.out.println("x="+x+" "+"y="+y+" "+"z="+z);
    }
}
public class Z
{
    public static void main(String args[])
    {
        H real=new H(6,7,8);
        real.print();
    }
}

----------------解决方案--------------------------------------------------------
zhao laoshi dang mian wen ,hen hao jiejue de
----------------解决方案--------------------------------------------------------
回复 7楼 lampeter123
谢啦!!
----------------解决方案--------------------------------------------------------
  相关解决方案