Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法访问祖父母类构造函数_Java_Android - Fatal编程技术网

Java 无法访问祖父母类构造函数

Java 无法访问祖父母类构造函数,java,android,Java,Android,我创建了3个类,如下所示: public class A{ protected int x; public A(){ this.x=0; } public A(int x){ this.x=x; } public void doSomething(){ x=1; } } public class B extends A{ @Override public void doSomething(){

我创建了3个类,如下所示:

public class A{
   protected int x;
   public A(){
      this.x=0;
   }
   public A(int x){
      this.x=x;
   }

   public void doSomething(){
      x=1;
   }
}



public class B extends A{
   @Override
   public void doSomething(){
      x=2;
   }
}



public class C extends B{
   protected int y;
   public C(){
      super();
      y=0;
   }
   public C(int x, int y){
      super(x);//Error
      this.y=y;
   }
   @Override
   public void doSomething(){
      x=3;
      y=3;
   }
}
我的IDE(Android studio)返回此错误:

错误:(26,8)梯度:错误:类B中的构造函数B不能为 适用于给定类型;必需:未找到参数:int原因: 实际参数列表和形式参数列表的长度不同


如果这个问题是因为我对OOP的无知,我很抱歉,但是我真的被阻碍了,我真的需要你们的帮助。多谢各位

在错误的位置调用
B
的单参数构造函数。但是,
B
没有单参数构造函数。它只有零参数默认构造函数


您需要将零参数和单参数构造函数添加到类
B

构造函数不会被子类继承。这意味着
B
不会继承
A
的两个构造函数。每当您不创建任何显式构造函数时,Java编译器就会创建一个隐式默认构造函数,该构造函数不接受任何参数,除了隐式调用超类构造函数之外,什么也不做

B
中的默认构造函数是
C
中的第一个构造函数工作的原因。它使用
super()
显式调用它。但是由于没有采用
int
B
构造函数,因此在
C
中调用
super(x)
是一个错误


创建显式构造函数
B(int)
时,将调用
super(x)
C
的第二个构造函数中编译。因为现在您将有一个显式构造函数,不再有隐式默认构造函数,所以您还必须在
B
中创建一个显式无参数构造函数,这样
C
中对
super
的第一个构造函数的调用仍将编译。

我做了类似
B(int x){super(x)}
作为临时解决方案!然而,如果我在类a中有更多的构造函数,比如:
public a(intx,boolean-choice){if(choice)this.x=x;else x=0;}
并且想要在类C中扩展它,那么我必须在类B中创建一个构造函数,它看起来非常冗余!我对类B感到好奇,它仍然接受类A的构造函数作为它的构造函数,比如
BB=newB(10)仍在工作。那么为什么C不能访问这种构造函数呢?