xarda Δημοσ. 23 Νοεμβρίου 2019 Δημοσ. 23 Νοεμβρίου 2019 (επεξεργασμένο) εχω: public class Customer { private String name; private String creditRating; public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void setCreditRating(String creditRating) { this.creditRating = creditRating; } public String getCreditRating() { return this.creditRating; } //Constructor public Customer(String name,String creditRating) { this.name = name; this.creditRating = creditRating; } public void print() { System.out.println("\n*****************************\n"); System.out.println("\nCustomer type: " + this.name + "\nCredit Rating: " + this.creditRating); } } public class CorporateCustomer extends Customer{ private String contact; public void setContact(String contact) { this.contact = contact; } public String getContact() { return this.contact; } //Constructor public CorporateCustomer(String name, String creditRating, String contact) { super(name,creditRating); this.contact = contact; } @Override public void print() { super.print(); System.out.println("\nContact: " + this.contact + "\n********************************\n"); } @Override public String toString() { super.toString(); return "\nContact: " + this.contact + "\n********************************\n"; } } public class main { public static void main(String[] args) { ArrayList<Customer> customers = new ArrayList<Customer>(); Customer cu = new CorporateCustomer("Corporate Customer 0","BB","+03219845128"); Customer cu1 = new CorporateCustomer("Corporate Customer 1","BB-","+0328779313"); Customer pc = new PersonalCustomer("Personal Customer 0","A+","VISA"); Customer pc1 = new PersonalCustomer("Personal Customer 1","DD-","MasterCard"); customers.add(cu); customers.add(cu1); customers.add(pc); customers.add(pc1); //Ekteleitai kanonika for(Customer customer: customers) { System.out.println("\n" + customer.getName() + " " + customer.getCreditRating() + " " + customer.toString()); } //Compile error for(Customer customer: customers) { System.out.println("\n" + customer.getName() + " " + customer.getCreditRating() + " " + customer.print()); } } } Στο Loop της main() μπορεί να κληθεί κανονικά η @override μεθοδος customer.toString() όμως δεν μπορει να εκτελεστει η customer.print() στο επόμενο Loop. Γιατι;; Επεξ/σία 24 Νοεμβρίου 2019 από xarda
antbyron Δημοσ. 23 Νοεμβρίου 2019 Δημοσ. 23 Νοεμβρίου 2019 (επεξεργασμένο) Φαίνεται ότι έχεις λάθος ένα ερωτηματικό στο τέλος. Το ide που δουλεύεις δεν σου δείχνει το λάθος; Επεξ/σία 23 Νοεμβρίου 2019 από antbyron 2
xarda Δημοσ. 24 Νοεμβρίου 2019 Μέλος Δημοσ. 24 Νοεμβρίου 2019 Να το κανω λιανά με μικρό παραδειγμα. Εχω μια superClass A , μια subClass Β και μια subClass C public Class A{ public void print(){ System.out.println("I am class A!!!"); } public Class B extends A{ public void print(){ System.out.println("I am class B!!!"); } public Class C extends A{ public void print(){ System.out.println("I am class C!!!"); } και στη main μου θελω να δημιουργήσω ενα ArrayList και εκει να τοποθετήσω αντικείμενα είτε Class B ειτε Class C public class myClass{ public static void main(String[] args){ ArrayList<A> a = new ArrayList<A>(); B b = new B(); C c = new C(); a.add(b); a.add(c); /* * ΠΟΙΟΣ Ο ΚΩΔΙΚΑΣ ΓΙΑ ΝΑ ΠΡΟΣΠΕΛΑΣΩ ΤΗΝ ArrayList ??? /* } } 1. με ποιο τρόπο θα μπορεσω να προσπελάσω τα στοιχεία της ArrayList και να εμφανισω την αντίστοιχη print που γίνεται @override ?? 2. γενικά στην κληρονομικότητα θα έστεκε ενα ενδεχόμενο να φορτώσουμε τιμές στις ιδιότητες της superClass και όχι σε μια απο τις subclasses ??
Lanike71 Δημοσ. 24 Νοεμβρίου 2019 Δημοσ. 24 Νοεμβρίου 2019 (επεξεργασμένο) //Compile error for(Customer customer: customers) { System.out.println("\n" + customer.getName() + " " + customer.getCreditRating() + " " + customer.print();); } Ρίξε μία ματιά μέσα στην παρένθεση τι ακριβώς προσπαθείς να κάνεις...Είναι όλα strings; Επεξ/σία 24 Νοεμβρίου 2019 από Lanike71
xarda Δημοσ. 24 Νοεμβρίου 2019 Μέλος Δημοσ. 24 Νοεμβρίου 2019 Πραγματι ναι σωστα. Επιστρέφει void η customer.print() και γι αυτο υπαρχει compile error.
Lanike71 Δημοσ. 24 Νοεμβρίου 2019 Δημοσ. 24 Νοεμβρίου 2019 3 λεπτά πριν, xarda είπε Πραγματι ναι σωστα. Επιστρέφει void η customer.print() και γι αυτο υπαρχει compile error. Καλώς. Όσο για τα άλλα ερωτήματα, προσθέτεις κανονικά στη λίστα τα αντικείμενα. Το μόνο πρόβλημα που μπορεί να υπάρξει στην προσπέλαση,είναι αν ένα αντικείμενο, έστω τύπου Β, έχει κάποια μέθοδο, που δεν έχουν οι άλλες κλάσεις και θες να την καλέσεις. Εκεί θα πρέπει να δουλέψεις με το instanceof και να κάνεις τον έλεγχο του αντικειμένου της λίστας.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα