代码如下:class A{ int x=1; int y=1; A(int x1,int y1) {  x=x1;
 
  y=y1; }}class B extends A{ int x=2; float z; B(int xx,int yy) {  super(0,0);  this.x=xx;this.y=yy; }}public class EtndsDemo{ public static void main(String[] args) {  B b1=new B(1,2,0);  System.out.println(b1.x);  System.out.println(b1.y);  System.out.println(b1,z); }}这个程序调试的时候出错了,说变量z无法找到。哪位高手给修改并大致解释一下。谢谢啊O(∩_∩)O~

解决方案 »

  1.   

    就算","改成".",B b1=new B(1,2,0); 也是错的,类B没有声明这样的构造器编译出错的
      

  2.   


    class A{ int x = 1; int y = 1; A(int x1, int y1) { x = x1; y = y1; }}class B extends A{ int x = 2; float z = 0.0f;//第一处错误,没有初始化z变量 B(int xx, int yy) { super(0, 0); this.x = xx;
    this.y = yy; }}public class EtndsDemo{ public static void main(String[] args) { B b1 = new B(1, 2); System.out.println(b1.x); System.out.println(b1.y); System.out.println(b1.z);//第二处错误,把","改成"." }}
      

  3.   

    就是啊,你B中根本就没有这个构造方法, 你怎么new出一个对象呢,你的B构造方法里面是两个int类型的参数,可是你B b1 = new B(1,2,0)肯定是错的,你传的是三个参数。
      

  4.   

    这个程序主要想说:A中有属性x,B继承A也有属性x相同名字的属性字段,子类和父类是如何操作的。注意:这只是测试说明,在实际的编程中不要这样使用,程序的可读性很差,很容易自己就晕了。
      

  5.   


    class A{ int x = 1;//定义变量x,y并赋值为1; int y = 1; A(int x1, int y1)//定义方法A,调用方法A时,需要有两个int型的参数 { x = x1;//把传进来的参数值赋值给变量x,y---------------调用顺序③ y = y1; }}class B extends A//类B继承了类A{

    int x = 2; float z = 0.0f;//定义变量,赋初值0.0后面的f表示float类型 B(int xx, int yy) { super(0, 0);//调用父类的A方法,给x,y赋值---------------调用顺序② this.x = xx;//把传进来的xx,yy赋值给当前对象的x,y,在main方法中,b1对象.x和.y的值就是这里赋值的
    this.y = yy;
    //super方法是给A的x,y变量赋值,这里通过this.x和this.y赋值了。相当于super方法根本没用了。
    }}public class EtndsDemo{ public static void main(String[] args)//运行必须的启动运行类 { B b1 = new B(1, 2);//创建一个类B的对象---------------调用顺序① System.out.println(b1.x);//打印定义对象的xyz的值 System.out.println(b1.y); System.out.println(b1.z); }}希望不是误导啊
      

  6.   

    B继承了A,而A的成员x,y是default访问权限,所以B也拥有了A的x,y,此时调用super(0, 0);是初始化了A的成员x,y紧跟着的this.x = xx;this.y = yy;是初始化了B的x,y
    这个才是重点