计数器子类的实例数

时间:2016-04-04 12:44:04

标签: java

当我尝试在构造函数调用时为多个实例实现计数器时,Eclipse会保持通知错误。我一直在搜索这个问题,但解决方案是eclipse不会让的。 问题出现在子类的Student() { count++; }中。

Implicit super constructor Dosije() is undefined. Must explicitly invoke another constructor

主档

import java.util.Scanner;

public class TestDosije {

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    String jmbg=null;

    System.out.println("ime osobe: ");
    String ime= in.next();

    System.out.println("prezime osobe: ");
    String prezime= in.next();
    System.out.println("jmbg: ");

    while(!(Dosije.jesteJMBG(jmbg =in.next()) ))  {


    }
    String ime_prezime= ime + " " + prezime;

    Dosije dosije = new Dosije(ime_prezime, jmbg);
    System.out.println(dosije.toString());

    System.out.println("broj indeksa: ");
    int index= in.nextInt();

    System.out.println("godina upisa: ");
    int upis= in.nextInt();

    System.out.println("studije: ");
    int studije= in.nextInt();

    Student student = new Student(dosije, index, upis, studije);

    System.out.println(student.toString());
    System.out.println(student.getCount());


}

}

超类

public class Dosije {

private String ime_prezime;
private String jmbg;

public Dosije(String ime_prezime, String jmbg) {
    this.ime_prezime=ime_prezime;
    this.jmbg=jmbg;
}

public Dosije(final Dosije d) {
    ime_prezime=d.ime_prezime;
    jmbg=d.jmbg;
}

public String getImePrezime() { return ime_prezime; }
public void setImePrezime(String ime_prezime) { this.ime_prezime= ime_prezime;}

public String getJMBG() { return jmbg; }
public void setJMBG(String jmbg) { this.jmbg= jmbg;}

public String toString() {
    return ime_prezime + "\njmbg: " + jmbg;
}

public static boolean jesteJMBG(String jmbg) {


    if(jmbg.length() != 13) {
        System.err.println("jmbg ima 13 cifara");
        return false;
    }


    for(int i=0;i < jmbg.length(); i++)  {
        if(!(Character.isDigit(jmbg.charAt(i))) ) {
            System.err.println("jmbg nije broj!");
            return false;
        }
    }

    return true;
}

}

我试图计算

的实例的子类
public class Student extends Dosije{

private int br_index;
private int god_upis;
private int profil_studija;

private static int count=0;

 Student() {      
    count++;     //the devil himself
}

public Student(final Dosije d, int index, int upis, int studije){
    super(d);
    br_index=index;
    god_upis=upis;
    profil_studija=studije;

}

public Student(final Student s) {
    super(s);
    br_index=s.br_index;
    god_upis=s.god_upis;
    profil_studija=s.profil_studija;

}

public void setProfil(int n) {profil_studija=n;}

public int getCount() { return count;  }

public String Studije(int i) {
    if(i == 0)
        return "Osnovne";
    else if(i == 1)
        return "MSc";
    else
        return "PhD";

}


public String toString() { 
    return super.toString() + "\n" + "broj indeksa: " + br_index + "/" + (god_upis % 100) + "\n" 
            + "studije: " + Studije(profil_studija);
}

}

1 个答案:

答案 0 :(得分:2)

由于超类没有无参数构造函数,因此Student()构造函数不会传递编译,因此编译器添加的对super();的隐式调用不会通过编译。

您可以添加public Dosije() {}构造函数以防止编译错误。

但是,您可能还希望在其他count构造函数中增加Student,以便计算创建的实例总数,而不管使用的是哪个构造函数。