Java 使用 super 关键字继承

Java inheritance using super keyword

我在我的程序中使用继承和超级函数,但是当我扩展我的 class 时它显示错误消息 "There is no default constructor in 'cc'. "。此错误消息是在扩展第一个子 class 并尝试创建第二个子 class 之后出现的。这是代码

class aa{
int i=-1;
int show(){
return i;
}
} 
class bb extends aa{ 
 int i;
 bb(int g,int j){
 super.i=g;
 i=j;
 }
}

class cc extends bb {   
int j,k;
cc(int i, int j,int k) {
  super(i,j);
  super.i=i;
  this.j=j;
  this.k=k;
  }
}
 class dd extends cc{   // here the error showing 
 int h;                //" There is no default constructor in 'cc' "
 void hello(){
 System.out.println("hello");
 }
}
class SuperUseExample3 {
    public static void main(String[] args) {
        aa x = new aa();
        System.out.println("value of a = "+x.i);
        bb y = new bb(8,2);
        System.out.println("value of a in class cc = "+y.show());
        System.out.println("value of b in class bb = "+y.i);
        cc z =new cc(12,13,14);
        System.out.println("value of a in class cc = "+z.show());
        System.out.println("value of b in class cc = "+z.j);
        System.out.println("value of c in class cc = "+z.k);
    }
}

cc class构造函数是

cc(int i, int j,int k) {
}

因此,您需要在dd中调用super(i, j, k)。例如:

 class dd extends cc{   
   int h;                
   dd(int i, int j,int k) {
     super(i, j, k);
   }
   void hello(){
     System.out.println("hello");
   }
 }

您的 cc class 有一个接受参数的构造函数:

cc(int i, int j, int k) {}

如果您想继承cc,您必须:

  • 在您的 dd 构造函数中调用 super(int i, int j, int k) 来调用 cc 的构造函数,传递构造函数所需的参数。
  • 或者为 cc 创建一个不带参数的默认构造函数:cc() {}。如果你不调用super(),默认会调用这个构造函数。

问题是 dd 扩展了 cc,它有一个 cc(int i, int j, int k) 的构造函数,但是 dd 的构造函数没有调用它。
您需要向 dd 添加一个调用 super(i, j, k) 的构造函数。

dd 的示例代码:

}
class dd extends cc{
dd(int i, int j, int k) {
super(i, j, k);
}
int h;
void hello(){
System.out.println("hello");
}

您正在扩展 class cc in dd。但是在 dd 中你没有初始化 cc 拥有的任何东西,这是错误的,因为当调用 dd 时它正在搜索它的 superclass 的构造函数并且当没有定义构造函数时 java 需要一个没有默认参数构造函数。所以它在 cc 中调用该参数,但你没有在 cc 中定义任何空白参数,所以它说它只有 1 构造函数,你需要创建其他空白构造函数。

dd 继承了 cc,因此它必须调用 cc 的默认构造函数,目前不存在。

要解决这个问题,只需添加一个不带参数的构造函数

class cc extends bb {   
    int j,k;
    cc(){
        //do whatever you want
    }
    ..//rest of code
}