【问题标题】:Java inheritance using super keyword使用 super 关键字的 Java 继承
【发布时间】:2018-05-30 23:03:04
【问题描述】:

我在我的程序中使用继承和超级函数,但是当我扩展我的类时,它显示错误消息“'cc'中没有默认构造函数。”。此错误消息是在扩展第一个子类并尝试创建第二个子类之后出现的。这是代码

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

【问题讨论】:

    标签: java inheritance super


    【解决方案1】:

    您正在 dd 中扩展类 cc。但是在 dd 中,您没有初始化 cc 拥有的任何东西,这就是错误,因为当 dd 被调用时,它正在搜索其超类的构造函数,而当没有定义构造函数时,java 将无参数构造函数作为默认值。所以它在 cc 中调用了那个参数,但是你没有在 cc 中定义任何空白参数,所以它说它只有 1 构造函数,你需要创建其他空白构造函数。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        cc类构造函数是

        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");
           }
         }
        

        【讨论】:

          【解决方案4】:

          您的 cc 类有一个带参数的构造函数:

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

          如果你想从cc继承,你必须:

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

          【讨论】:

            【解决方案5】:

            问题是 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");
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-12-15
              • 1970-01-01
              • 2017-08-10
              • 2015-06-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多