flo1 Δημοσ. 9 Ιουνίου 2009 Δημοσ. 9 Ιουνίου 2009 >public interface Interface1 { int ANSWER=42; int getval(); } public interface Interface2 { int ANSWER=42; float returnval(); } public class TestClass implements Interface1, Interface2 { private int a; TestClass() {a=34;} [color="Red"] public int getval() { return ANSWER+a; }[/color] public float returnval() { return (float)a+1; } Το λαθος ειναι η κοκκινη γραμμη, και η αιτια ειναι: Aσυνεπη (inconsistent) interfaces.Διφορουμενη δηλωση. Ερωτηση: Tι σημαινει ασυνεπη Interfaces? Υποθετω οτι επρεπε να κανει typecast στο return (int)ANSWER+a; Oμως γιατι ειναι αναγκαιο, αφου και στις δυο δηλωσεις των μεθοδων η ANSWER ειναι τυπου int?
fromaz Δημοσ. 9 Ιουνίου 2009 Δημοσ. 9 Ιουνίου 2009 Το πρόβλημα έγκειται στη χρήση του ANSWER (στην κόκκινη γραμμή). Η τιμή του είναι αυτό που λέμε ambiguous καθώς κληρονομείται και από τα δύο interfaces. Πως ξέρει ο compiler σε ποιο από τα δύο ANSWER αναφέρεσαι? Δεν έχει σημασία που έχουν την ίδια τιμή. Αύριο, πάει ένας προγραμματιστής και αλλάζει το ANSWER του Interface1, αγνοώντας το άλλο. Για περισσότερα... http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#40491
flo1 Δημοσ. 9 Ιουνίου 2009 Μέλος Δημοσ. 9 Ιουνίου 2009 Καταλαβα. (Δεν εχει σημασια δηλαδη, που χρησιμοποιει τη μεθοδο του α' Interface, μπορει ο compiler να δει την τιμη ΑNSWER και απο το β'.)
ΠάρηςΓ Δημοσ. 9 Ιουνίου 2009 Δημοσ. 9 Ιουνίου 2009 Ναι αυτο σου ειχα πει. Τωρα δεν ξερω εαν στη Java μπορεις να πεις σε ποια αναφερεσε η να ορισεις virtual οπως στη c++.Καλυτερα παντως να ειναι ξεχωριστά.Αυτο εξαρτάται απο αυτο που θες να κανεις βεβαια.. ΥΓ Απλα θα λες απο οτι ειδα interface1.bla κτλ Βεβαια αναλογα το προβημα μπροουμε να σοθ προτεινουμε κ αλλες λυσεις
Evgenios1 Δημοσ. 9 Ιουνίου 2009 Δημοσ. 9 Ιουνίου 2009 Γινετε να αποδωσεις τημες σε ενα interface? Και τωρα που το δοκιμασα σε netbeans, το παρακατω ειναι μια χαρα > interface a{ int getValue(); } interface b{ int getValue(); } interface c{ int getValue(); void DoNothing(); } public class Main implements a,b,c { public static void main(String args[]) { a inter =new Main(); System.out.println(inter.getValue()); } public int getValue() { return 12; } public void DoNothing() { } } δυο ερωτησεις α) γιατι static τιμη μεσα σε ενα interface; β) γιατι ζητας ενα ANSWER ετσι στο ακυρο? το interface δεν ειναι base class (απ'ο,τι ξερω) ειναι αυτο που λεει και η λεξη "interface"
flo1 Δημοσ. 9 Ιουνίου 2009 Μέλος Δημοσ. 9 Ιουνίου 2009 Γινετε να αποδωσεις τημες σε ενα interface? Aυτο ειναι απλα ενα παραδειγμα, πανω στη θεωρια . Δηλαδη δεν ειναι μερος προγραμματος.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.