2016-04-04 16 views
1

Eclipse, yapıcı tarafından çağrıldığında bir çok örnek için bir sayaç uygulamaya çalıştığımda bir hatayla ilgili bilgi verir. Konuyla ilgili araştırma yaptım, ancak çözümler tutulacak olan kesin şey. Sorun, alt sınıfta Student() { count++; } dur.Örneklerin sayısı sayaç alt sınıfı

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

Ana dosya

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()); 


} 

} 

deniyorum hangi örneklerini üst sınıf

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; 
} 

} 

alt sınıf saymak

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); 
} 

} 

cevap

2

Sizin Student() constructor, super sınıfın parametresiz bir kurucusuna sahip olmadığı için derlemeyi geçmez, dolayısıyla derleyici tarafından eklenen super(); örtük çağrısının derleme geçmez.

Bu derleme hatasını önlemek için public Dosije() {} yapıcı ekleyebilirsiniz. Ancak, hangi kurucunun kullanıldığına bakılmaksızın oluşturulmuş toplam örnek sayısını saymak için count değerini diğer Student yapıcılarına da artırmak isteyebilirsiniz.

+0

Potansiyel olarak yeni bir ses çıkarıyor olmanız için özür dilerim, ancak üst sınıftaki parametresiz yapıcı nerede? Her iki kurucu da parametrelere sahiptir. – monolith937

+0

@ monolith937 İşte bu nokta. Üst sınıfta parametresiz bir kurucuyu kaçırıyorsunuz, bu da Öğrenci sınıfındaki parametresiz kurucunun derlemeyi geçmemesinin nedeni. – Eran

+0

@ monolith937 Öğrenci sınıfınızda parametresiz kurucunuz var: 'public student() {count ++}'. Bir çocuk sınıfı olduğundan, derleyici bunu otomatik olarak derlemeye çalışır: 'public student() {super(); ++ saymak; } '. Ancak, Dosije sınıfınız parametresiz bir kurucuya sahip olmadığı için, hatanın görüntülenmesini sağlayabilirsiniz. –

İlgili konular