java - java中的继承(编译错误)

标签 java oop

这是我的程序:

class A{
    A(int a){
    }

class B extends A{
    B(){    
    }
}

}

编译时出现错误:

C:\Users\Public\Documents\AB.java:6: error: constructor A in class A cannot be applied to given types;
    B(){
       ^
  required: int
  found: no arguments
  reason: actual and formal argument lists differ in length

并通过我的代码中的此更改修复了它:

    class A{
        A(int a){
        }
            A(){
        }

    class B extends A{
        B(){
        }
    }
}

但我不明白为什么?

感谢您的帮助。

最佳答案

因为你的A类声明了一个构造函数

A(int a){
}

然后任何想要实例化 A 的代码都需要使用该构造函数来实现。有点像

A a = new A(42);

您还声明了一个子类 B。由于 B 是一个 A,除了它的构造函数之外,它还必须调用父类的构造函数。这是由编译器隐式完成的。说你有

class A{
    A(){
    }

class B extends A{
    B(){
        // super(); injected by compiler
    }
}

如果您没有无参数构造函数,那么编译器就不知道要注入(inject)哪个构造函数调用。您需要显式声明 super(...) 调用。

class A{
    A(int a){
    }

class B extends A{
    B(){    
        super(42);
    }
}

这样想:如果不调用构造函数,就无法构造A。当您构造一个 B 时,您通过继承也构造了一个 A,因此您需要调用相同的构造函数。

关于java - java中的继承(编译错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179376/

相关文章:

Java:使用 TCP 套接字的简单 http GET 请求

c# - 在 C# 中,子类对象如何直接调用被重写的父类(super class)方法?

java - 参数索引超出范围(1 > 参数个数,即 0)

java - java/kotlin 方程中的时间顺序和加法函数

c - 如何在 "object oriented"C中动态初始化数组?

java - 类应该为其依赖项定义 getter 吗?

scala - Spark 斯卡拉: Pass a sub type to a function accepting the parent type

php - 什么时候应该在 PHP 类中声明变量?

java - 不能从静态上下文中引用内部类,但前提是外部类是通用的

java - grails中转换日期错误