书上说:当重载一个构造函数时,首先可以提供一个基本的版本,然后所有其他版本的构造寒素可以使用
this(paramenterList),替换部分或全部参数,再来调用这个基本构造函数,以免代码的重复。
//以下Student类是书中例题,thisPointerTest类是鄙人自己补充的,在编译时出错!class Student{
private String name;
private double gpa;
public Student(){
this("unknow",-1.0);
}
public Student(String _name){
this(_name,-1.0);
}
public Student(double _gpa){
this("unknow",_gpa);
}
public void showStudent(){
System.out.println("Student: "+name);
if(gpa>0.0){
System.out.println("Gpa: "+gpa);
}
else
System.out.println();
}
}public class thisPointerTest {
public static void main(String []args){
Student st1=new Student();
Student st2=new Student("lau");
Student st3=new Student(5.0);
st1.showStudent();
st2.showStudent();
st3.showStudent();
}
}

解决方案 »

  1.   

    不出错才怪
    你又没有一个student(string,double)型的构造函数
      

  2.   

    额,Student没有下面这样的构造
    Student(String _name, double _gpa)
      

  3.   

    你都说了要提供一个基本的版本,为什么就不提供呢?
    修改如下:
    class Student{ 
    private String name; 
    private double gpa;
    public Student(String _name,double _gpa){
        //添加你的操作,this(String _name,double _gbp)就是这个构造器。如:
        this.name=_name;
        this.gpa=_gpa;
    }
    public Student(){ 
    this("unknow",-1.0); 

    public Student(String _name){ 
    this(_name,-1.0); 

    public Student(double _gpa){ 
    this("unknow",_gpa); 

    public void showStudent(){ 
    System.out.println("Student: "+name); 
    if(gpa>0.0){ 
    System.out.println("Gpa: "+gpa); 

    else 
    System.out.println();