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

overloading / override compile error γιατι;;;


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

Δημοσ. (επεξεργασμένο)

εχω:

 

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. Γιατι;;

 

Επεξ/σία από xarda
Δημοσ. (επεξεργασμένο)

Φαίνεται ότι έχεις λάθος ένα ερωτηματικό στο τέλος.

Το ide που δουλεύεις δεν σου δείχνει το λάθος;

Επεξ/σία από antbyron
  • Like 2
Δημοσ.

Να το κανω λιανά με μικρό παραδειγμα.

Εχω μια 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 ??




 

Δημοσ. (επεξεργασμένο)
//Compile error
		for(Customer customer: customers) {
			System.out.println("\n" + customer.getName() + " " + customer.getCreditRating() + " " + customer.print(););
		}		

Ρίξε μία ματιά μέσα στην παρένθεση τι ακριβώς προσπαθείς να κάνεις...Είναι όλα strings;

 

Επεξ/σία από Lanike71
Δημοσ.
3 λεπτά πριν, xarda είπε

Πραγματι ναι σωστα. Επιστρέφει void η customer.print() και γι αυτο υπαρχει compile error.

 

Καλώς.

Όσο για τα άλλα ερωτήματα, προσθέτεις κανονικά στη λίστα τα αντικείμενα. 

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

Εκεί θα πρέπει να δουλέψεις με το instanceof και να κάνεις τον έλεγχο του αντικειμένου της λίστας.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...