超类中的java构造函数
下面的代码是一个测试程序。为什么我不能在这个程序中使用A(int A)超类中的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
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()”。因此,如果您为的构造函数提供一些参数,则默认构造函数与之不匹配,需要您显式指定一个。