Java 计数器子类的实例数
当我试图为构造函数调用的多个实例实现计数器时,Eclipse会不断通知错误。我一直在研究这个问题,但解决方案正是eclipse不允许的。 问题出在子类中的Java 计数器子类的实例数,java,Java,当我试图为构造函数调用的多个实例实现计数器时,Eclipse会不断通知错误。我一直在研究这个问题,但解决方案正是eclipse不允许的。 问题出在子类中的Student(){count++;} 未定义隐式超级构造函数dosje()。必须显式调用另一个构造函数 主文件 import java.util.Scanner; public class TestDosije { public static void main(String[] args) { Scanner in = new
Student(){count++;}
未定义隐式超级构造函数dosje()。必须显式调用另一个构造函数
主文件
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;
}
}
您的Student()
构造函数没有通过编译,因为超类没有无参数构造函数,所以对super()的隐式调用编译器添加的代码>未通过编译
您可以添加public Dosije(){}
构造函数来防止编译错误
但是,您可能也希望在另一个Student
构造函数中增加count
,以便计算创建的实例总数,而不管使用了哪个构造函数。请原谅,这听起来可能有些生疏,但我的无参数构造函数在超类中的位置在哪里?两个构造函数都有参数。@monolith937这就是重点。超类中缺少无参数构造函数,这就是学生类中的无参数构造函数无法通过编译的原因。@monolith937在学生类中有一个无参数构造函数:public Student(){count++}
。由于它是一个子类,编译器会自动尝试将其编译成以下内容:public Student(){super();count++;}
。但是,由于您的Dosije类没有无参数构造函数,因此会显示错误。@monolith937我错误地写了“有”而不是“没有”。现在修正:)哦,这澄清了问题。谢谢,它起作用了,它为我对继承的理解提供了一些启示:)
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);
}
}