超类中的java构造函数

时间:2011-11-15 02:04:45

标签: 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;
    }
}

为什么不能将参数传递给构造函数?是什么原因? Netbeans错误消息:

类tma1.A中的

构造函数A不能应用于给定的类型;   必需:int   发现:没有争论   原因:实际和正式的参数列表长度不同

2 个答案:

答案 0 :(得分:2)

在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中指定一些东西,如果你没有在代码中省略某些东西

答案 1 :(得分:1)

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

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

A没有no-arg构造函数,因为已经定义了另一个(因此java不必创建一个)。