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

java multiple inheritance


spmen

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

Δημοσ.

paidia exw autin edw tin erwtisi k thelw na mou peite an mporeite na breite tin apantisoula..

 

Discuss two ways of simulating multiple inheritance in java.

 

ton ena tropo ton kserw pou kaneis implement ta interfaces alla de mporw na brw ena deutero...

 

sas euxaristw gia to xrono sas :-D

Δημοσ.

Δυστυχώς δεν υπάρχει πολλαπλή κληρονομικότητα στην Java με την κανονική της έννοια (Κληρονομικότητα από παραπάνω από 1 τάξεις). Για αυτό υπάρχουν και τα interfaces από τα οποία μπορείς να κληρονομίσει μία τάξη από όσα θέλει.

Οπότε δεν υπάρχει άλλος τρόπος από αυτόν που ανέφερες δυστυχώς.:(

Δημοσ.
>
class SuperSuperClass{
   int a = 2;
}

class SuperClass extends SuperSuperClass{
   int b = 5;
}

public class InheritanceSimulator extends SuperClass{
   public void foo(){
       System.out.println("a= " +this.a);
       System.out.println("b= " +this.;
   }
   
   public static void main(String[] args){
       InheritanceSimulator obj = new InheritanceSimulator();
       obj.foo();
   }
}

Είναι και αύτος ένας τρόπος τον οποίο φαντάζομαι τον έχεις σκεφτεί, σωστά?

Δημοσ.

Αυτό δεν ονομάζεται πάντως πολλαπλή κληρονομικότητα.Με αυτή την λογική έχουμε πάντα πολλαπλή κληρονομικότητα καθώς αν κάνουμε

 

>class extends javax.swing.JFrame

 

Τότε κληρονομούμε και την τάξη java.awt.Container και την java.awt.Component αλλά και την java.awt.Window και να μην εξαιρέσουμε και την java.lang.Object!

 

Ουσιαστικά δηλαδή κληρονομείς από μία τάξη που απλά κληρονομεί από μία άλλη.Αλλά μην ξεχνάμε ότι ΟΛΕΣ οι τάξεις στην java κληρονομούν από κάπου!(Εκτός της java.lang.Object)!

 

Πάντως επειδή είμαι περίεργος δεν ρωτάς τον Καθηγητή σου να μας πει και εμάς πως γίνεται αυτό?Κάτι θα ξέρει παραπάνω....

Δημοσ.

otan tha to mathw file auto apo to kathigiti mou tha einai arga giati einai erwtisi apo open book exam pou exw na kanw.... ti na sou pw de xerw...pantws sas euxaristw...k an breite kati tha perimenw kali sas mera k euxaristw

Δημοσ.

Μάλιστα....composition για όσους δεν ξέρουν σημαίνει αυτό:

 

>
public class A{
}

public class Β{
private A a=new A();
}

 

Θα μπορούσε να πει κανείς πως μπορεί να σου ζητάει αυτό ο Καθηγητής σου!

Δημοσ.

Καταρχήν το composition δεν είναι inheritance, είναι ...composition. Στην java υπάρχει η έννοια της πολλαπλής κληρονομικότητας, με κάποια restrictions.

Μία κλάση μπορεί να κάνει extend μία άλλη κλάση, οπότε μέχρι εδώ έχουμε την απλή κληρονομικότητα. Η ίδια όμως κλάση μπορεί παράλληλα να κάνει implement ένα ή περισσότερα interfaces, οπότε με αυτό καλύπτεται η πολλαπλή κληρονομικότητα. Ο περιορισμός είναι οτι για να κάνεις πολλαπλή κληρονομικότητα, πρέπει η κλάσση σου να υλοποεί ρητά ΟΛΕΣ τις μεθόδους των interfaces που κάνει implement. Αν η υλοποίηση των μεθόδων όλων των interfaces δεν θεωρείται από κάποιους σαν πολλαπλή κληρονομικότητα, τότε οκ, αλλά στην θεωρία είναι multiple inheritance, έστω και Pure Inheritance όπως λέγεται στην C++. Εγώ σαν απάντηση θα έδινα οτι ο ένας τρόπος είναι να κάνεις implement multiple interfaces και ο δεύτερος να κάνεις extend σε μία class και ταυτόχρονα implement σε multiple interfaces

Δημοσ.

Εγώ πάντως νομίζω ότι λες δύο φορές το ίδιο πράγμα.

 

Και το ερώτημα είναι:

 

Discuss two ways of simulating multiple inheritance in java.

 

Αυτό σημαίνει ότι ζητούμενο είναι δύο τρόποι που να προσομοιώνεις την πολλαπλή κληρονομικότητα!!Και το composition κοινώς αποδεκτώς ένας τρόπος να το κάνεις.

 

http://www.artima.com/designtechniques/compoinh.html

Δημοσ.

Κοίτα, εδώ μπαίνει το θέμα τι εννοεί ακριβώς με τον όρο προσομοίωση multiple inheritance σε java. Να δώσω ένα παράδειγμα. Στο design σου έχεις μία κλάση Α η οποία πρέπει να υποστηρίζει τις μεθόδους των Β, Γ, Δ. Αν το δεις σαν κουτί, τότε η Α όντως κάνει προσομοίωση Multiple Inheritance. Αλλά, σε επίπεδο implementation και μιλώντας αυστηρά για java σε επίπεδο γλώσσας, αν πετύχεις την παραπάνω λειτουργικότητα χρησιμοποιώντας composition, για την java αυτο ΔΕΝ ειναι multiple inheritance, ενώ για αυτον που βλέπει το κουτί είναι. Δηλαδή, αν δείξεις τον κώδικα λέγωντας οτι χρησιμοποίησες multiple inheritance σε java και έχεις composition, είσαι λάθος. Και δεν ξέρω κατά πόσο έδωσα την σωστή απάντηση στον φίλο μας, πάντως σε java οι 2 τροποι να χρησιμοποιήσεις κληρονομικότητα είναι να κάνεις extend μία κλάσση και implement ένα ή περισσότερα interfaces.Οι τρόποι να κάνεις σύνθετες κλάσεις από απλές είναι είτε χρησιμοποιώντας κληρονομικότητα, είτε χρησιμοποιώντας composition, είτε συνδιασμός αυτών.

Δημοσ.

Διάβασα στα γρήγορα το άρθρο που έχεις στον σύνδεσμο

 

you can also get at the functionality of inheritance when you use composition.

 

Έτσι όπως το θέτει θα συμφωνήσω μαζί σου χώρις κατά ανάγκη αυτά που είπα πριν να είναι λάθος. Οπότε σύμφωνα και με το άρθρο μπορείς και με composition να πετύχεις το functionality toy inheritance (το κουτί που έλεγα στο προηγούμενο ποστ), αλλά σε επίπεδο γλώσσας αυτό δεν είναι Multiple inheritance.

Στο φινάλε θα συμφωνήσω οτι ο ένας τρόπος να προσομοιώσεις multiple inheritance είναι χρησιμοποιώντας composition

Δημοσ.

ΟΛΕ ΟΛΕ καταλήξαμε.

Πάντως και εγώ με την σειρά μου να συμφωνήσω μαζί σου ότι η μόνη "καθαρόαιμη" πολλαπλή κληρονομικότητα είναι αυτή που μία τάξη κάνει extend μία άλλη και implement ένα ή περισότερα interfaces.Αυτό άλλωστε είπα και στο πρώτο μου post.

Αλλά επειδή η όλη φύση της ερώτησης είναι πολύ περίεργη εφ'όσον εξ'ορισμού η Java δεν υποστηρίζει ΚΑΘΟΛΟΥ πολλαπλή κληρονομικότητα για αυτό και αναφέραμε την λύση του composition όπως είπε ο myle.

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

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

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