import java.util.*;
class A
{
int a;
String name;
String sex;
A(int a,String name,String sex)
{
this.a=a;
this.name=name;
this.sex=sex;
}
void ShowMess()
{
}
}
class B extends A
{
int age;
B(int a,String name,String sex,int age)
{
this.a=a;
this.name=name;
this.sex=sex;
this.age=age;
}
void ShowMess()
{
System.out.println("a+name+sex+age");
}
}
class T
{
public static void main(String args[])
{
B a=new B(1,"张三","女",10);
a.ShowMess();
}
}
为什么提示类A构造方法错误?
你好,很高兴为你解答。
这段代码提示B的构造函数错误。这是因为B继承A,B的构造函数会自动调用A的默认构造函数(即不带参数的构造函数),但A没有定义默认构造函数,所以就会报错。有两种改法:
1)在A中增加默认构造函数。如下:
class A {
int a;
String name;
String sex;
A(){ //修改这儿
}
A(int a, String name, String sex) {
this.a = a;
this.name = name;
this.sex = sex;
}
void ShowMess() {
}
}
class B extends A {
int age;
B(int a, String name, String sex, int age) {
this.a=a;
this.name=name;
this.sex=sex;
this.age=age;
this.age = age;
}
void ShowMess() {
System.out.println("a+name+sex+age");
}
}
2)修改B的构造函数,显式地调用A的非默认构造函数。如下:
class A {
int a;
String name;
String sex;
A(int a, String name, String sex) {
this.a = a;
this.name = name;
this.sex = sex;
}
void ShowMess() {
}
}
class B extends A {
int age;
B(int a, String name, String sex, int age) {
super(a,name,sex); //修改这儿
this.age = age;
}
void ShowMess() {
System.out.println("a+name+sex+age");
}
}