Προς το περιεχόμενο

Java - Κλήση γονικού παραμετρικού δομητή


Wise_One

Προτεινόμενες αναρτήσεις

Δημοσ.

Είναι άσκηση που την έχω λύσει πριν ένα χρόνο αλλά κάθομαι να την ξανακάνω τώρα. Βλέπω τον κώδικα που είχα γράψει, αλλά τώρα δε μου φαίνεται σωστός.

 

Εχουμε τα εξής:

 

>
public class Ypallilos{
  private String onoma, mitrwo, eidikotita, katoikia;
  public Ypallilos(String onoma, String mitrwo, String eidikotita, String katoikia){
     this.onoma = onoma;
     this.mitrwo = mitrwo;
     this.eidikotita = eidikotita;
     this.katoikia = katoikia;
  }
  //me8odoi set/get gia epe3ergasia twn private metavlitwn
}
#######################################################
public class Wromis8ioi extends Ypallilos{
  private int wres;
  public Wromis8ioi(int wres){
     //super(onoma, mitrwo, eidikotita, katoikia); (*)
     this.wres = wres;
  }
  //set/get me8odos
}

(*) Αν βγάλω τα σχόλια απ' την εντολή, όπως είναι λογικό χτυπάει ο compiler λέγοντας πως είναι private μεταβλητές. Τί γράφω ρε παιδιά για να καλέσει τον γονικό παραμετρικό δομητή;

 

Μια λύση (αυτή που έκανα στον προηγούμενο κώδικα) είναι να μη βάλω δομητές και να χρησιμοποιηθεί ο default στη δημιουργία αντικειμένου της κλάσης Ωρομίσθιοι. Εγώ όμως θέλω να βάλω κανονικά όλους τους δομητές.

Δημοσ.

Κάνεις protected τις μεταβλητές, αλλά η λογική σου είναι λάθος. Οι μεταβλητές που περνάς με την super() στο Ypallilos θα πρέπει να εισάγονται σαν παράμετροι στον δομητή του Wromis8ioi, όχι να τις κατεβάζεις και να τις ξανανεβάζεις!

Δημοσ.

Φίλε μου έχεις απόλυτο δίκιο. Ο δομητής του Ωρομίσθιοι θα έχει πάλι τις μεταβλητές που έχει κληρονομήσει μόνο που αυτές δίνονται στον super() δομητή. Τις άλλες τις περνάω κανονικά.

 

Τώρα που το δοκίμασα δουλεύει άψογα. Σ' ευχαριστώ πολύ.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...