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

Aπλη ερωτηση, Java.


flo1

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

Δημοσ.

>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?

Δημοσ.

Το πρόβλημα έγκειται στη χρήση του ANSWER (στην κόκκινη γραμμή). Η τιμή του είναι αυτό που λέμε ambiguous καθώς κληρονομείται και από τα δύο interfaces. Πως ξέρει ο compiler σε ποιο από τα δύο ANSWER αναφέρεσαι? Δεν έχει σημασία που έχουν την ίδια τιμή. Αύριο, πάει ένας προγραμματιστής και αλλάζει το ANSWER του Interface1, αγνοώντας το άλλο.

 

Για περισσότερα...

http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#40491

Δημοσ.

Καταλαβα.

(Δεν εχει σημασια δηλαδη, που χρησιμοποιει τη μεθοδο του α' Interface, μπορει ο compiler να δει την τιμη ΑNSWER και απο το β'.)

Δημοσ.

Ναι αυτο σου ειχα πει. Τωρα δεν ξερω εαν στη Java μπορεις να πεις σε ποια αναφερεσε η να ορισεις virtual οπως στη c++.Καλυτερα παντως να ειναι ξεχωριστά.Αυτο εξαρτάται απο αυτο που θες να κανεις βεβαια..

ΥΓ Απλα θα λες απο οτι ειδα interface1.bla κτλ Βεβαια αναλογα το προβημα μπροουμε να σοθ προτεινουμε κ αλλες λυσεις

Δημοσ.

Γινετε να αποδωσεις τημες σε ενα 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"

Δημοσ.
Γινετε να αποδωσεις τημες σε ενα interface?

 

Aυτο ειναι απλα ενα παραδειγμα, πανω στη θεωρια . Δηλαδη δεν ειναι μερος προγραμματος.

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

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

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