2016-04-04 23 views
1

コンストラクタによって呼び出されたときに多数のインスタンスのカウンタを実装しようとすると、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); 
} 

} 

答えて

2

あなたをカウントしようとしているインスタンスのサブクラススーパークラスにパラメータのないコンストラクタがないため、コンストラクタはコンパイルをパスしないため、コンパイラによって追加された​​への暗黙の呼び出しはコンパイルをパスしません。

コンパイルエラーを防ぐために、public Dosije() {}コンストラクタを追加できます。

しかし、Studentコンストラクタでcountを増やして、使用されたコンストラクタに関係なく、作成されたインスタンスの総数を数えたい場合があります。

+0

潜在的には新生児の声で聞こえますが、スーパークラスのパラメータのないコンストラクタはどこにありますか?両方のコンストラクターにパラメーターがあります。 – monolith937

+0

@ monolith937それがポイントです。スーパークラスにパラメータのないコンストラクタがありません。これは、Studentクラスのパラメータのないコンストラクタがコンパイルをパスしない理由です。 – Eran

+0

@ monolith937あなたのStudentクラスには、 'public student(){count ++}'というパラメータのないコンストラクタがあります。子クラスなので、コンパイラは自動的にこれをコンパイルしようとします: 'public Student(){super();カウント++; } '。しかし、Dosijeクラスにはパラメータがないコンストラクタがないため、エラーが表示されます。 –

関連する問題