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"); } }