class PersonInf {
String userName;
int userNumber;

public PersonInf(String name,int number){
userName=name;
userNumber=number;
}

public void show(){
System.out.println("userName:"+userName);
System.out.println("userNumber:"+userNumber);
}
}class PersonInformation extends PersonInf{
String userNationality;
int userAge;

public PersonInformation(String userNationality,int userAge){//此处有错
super.show();
this.userNationality=userNationality;
this.userAge=userAge;
}

public void show(){
super.show();
System.out.println("userNationality:"+userNationality);
System.out.println("userAge:"+userAge);
}
}public class Superuser{
public static void main(String[] args){
PersonInformation personInformation=new PersonInformation("Chinese",20);
personInformation.show();
}
}
错误说是未定义隐式超构造函数 PersonInf()。必须显式调用另一个构造函数。什么是隐式和显式啊?不懂,请求帮助!!!

解决方案 »

  1.   

    public PersonInformation(String userNationality,int userAge)
    {
             super.show();                          这个不对,你要用super显示的调用父类的有参数  的构造方法,应该super("你要传入的字符串", "你要传入的int类型的数"),加入你不希望调用父类有参数的构造方法,那么就在父类里面写一个不带参数的构造方法,哪怕是空实现,这样子类的构造方法就不用显示的调用父类的构造方法了,你就可以调用你想调用的父类其他的方法了
    }
      

  2.   

    当一个类写自己的构造函数时首先在自己的构造函数的第一行用关键字super来调用父类的构造函数,这样 就不会有那样的错误;
      

  3.   

    上面的代码应该为:
    public PersonInformation(String userNationality,int userAge){
    super(userNationality,userAge);
    super.show();
    this.userNationality=userNationality;
    this.userAge=userAge;
    }
      

  4.   

    public PersonInformation(String userNationality,int userAge){
    这里面隐含了super(),但是你没定义所以报错------------------------
    编程菜鸟学堂QQ群144648357