Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 - Fatal编程技术网

超类中的java构造函数

超类中的java构造函数,java,Java,下面的代码是一个测试程序。为什么我不能在这个程序中使用A(int A) public class A { int a; void meth(int b) { a+=b; } A(int a) { this.a=a; } } class B extends A { int a; void meh2(int b) { a+=b; } } 为什么不能将参数传递给构造函数?原因是什么?Ne

下面的代码是一个测试程序。为什么我不能在这个程序中使用A(int A)

public class A {
    int a;
    void meth(int b) {
        a+=b;
    }
    A(int a) {
        this.a=a;
    }
}

class B extends A {
    int a;
    void meh2(int b) {
        a+=b;
    }
}
为什么不能将参数传递给构造函数?原因是什么?Netbeans错误消息:

类tma1.A中的构造函数A不能应用于给定类型; 必填项:int 找到:没有参数
原因:实际参数列表和形式参数列表长度不同

在类B中,您需要构造函数。如果你的意思是不能从B调用A,那只是因为你在扩展类A,所以你需要使用super,它引用了超类。例如,B可以是:

    class B extends A {
    B(int a) {
//You can put additional code here

// This calls the constructor of A
        super(a);

//You can put additional code here
    }
    int a;
    void meh2(int b) {
        a+=b;
    }
}

否则,您需要为类B中的变量a赋值,如果您没有在类B中的代码中省略某些内容,则需要构造函数。如果你的意思是不能从B调用A,那只是因为你在扩展类A,所以你需要使用super,它引用了超类。例如,B可以是:

    class B extends A {
    B(int a) {
//You can put additional code here

// This calls the constructor of A
        super(a);

//You can put additional code here
    }
    int a;
    void meh2(int b) {
        a+=b;
    }
}

否则,您需要为类B中的变量a赋值,如果您没有在代码中省略某些内容,除非类具有已定义的构造函数,否则它将自动具有一个仅调用
super()
的无参数构造函数

编译器的抱怨似乎是:“您的无参数构造函数[您看不到]正在调用不存在的父无参数构造函数。”


A
没有无参数构造函数,因为定义了另一个构造函数(因此java不必创建一个)。

除非类有定义的构造函数,否则它自动有一个无参数构造函数,只调用
super()

编译器的抱怨似乎是:“您的无参数构造函数[您看不到]正在调用不存在的父无参数构造函数。”


A
没有无参数构造函数,因为定义了另一个构造函数(因此java不必创建构造函数)。

为什么不能?看起来你甚至都没有尝试…方法的转移:
method
->
meth
->
meh2
你为什么不能?看起来你甚至都不想尝试“方法”的转移:
method
->
meth
->
meh2
谢谢,但是为什么要删除类a中构造函数中的int a,程序就可以了?因为Java隐式创建了一个默认构造函数,类似于“classname()”。因此,如果您给A的构造函数提供一些参数,默认构造函数与之不匹配,需要您显式指定一个。谢谢,但是为什么要在类A的构造函数中删除int A,程序就可以了?因为Java隐式创建一个默认构造函数,类似于“classname()”。因此,如果您为的构造函数提供一些参数,则默认构造函数与之不匹配,需要您显式指定一个。