2013-04-12 15 views
7

Podczas dyskusji jeden z moich znajomych powiedział mi, że concrete methods would be allowed in java 1.8 in interfaces wtedy wtedy przyszło mi do głowy pytanie, tj. Czy są one dozwolone, to jak rozróżnimy metody. Na przykład
Mam dwa Interfejs Animal.java i Pet.java i oba mają tę samą metodę betonowej tj eat()
konkretne metody w interfejsach Java1.8

public interfaces Animal{ 

     void eat(){ 
       System.out.println("Animal Start eating ...."); 
     } 
    } 

    public interfaces Pet{ 

     void eat(){ 
       System.out.println("Pet Start eating ...."); 
     } 
    } 

teraz moja Zoo.java realizować oba te a nie zastąpić

public class Zoo() implements Pet , Animal{ 
      //Now name method is a part of this class 
    } 

Teraz tutaj jest mój confusion.How mogę nazwać specyficzną metodę na inteface animal korzystając Test obiekt

public class Demo{ 
     public static void main(String[] args){ 

       Zoo zoo = new Zoo(); 
       zoo.eat(); //What would be the output 
     } 
} 

sugestie? lub czy istnieje rozwiązanie tego w java1.8, ponieważ nie jestem w stanie znaleźć odpowiedzi.

+0

ale nie mogę znaleźć tej odpowiedzi w tych question.If jest duplikatem następnie proszę kierować do mnie odnośnie tego rozdzielania emisyjnej – Freak

+0

może to być itnerest zbyt statyczne non-dziedziczone metody w interfejsy http://stackoverflow.com/q/14646027/106261 – NimChimpsky

+0

twoje pierwotne pytanie jest tutaj odpowiedź http://stackoverflow.com/a/7857884/106261 – NimChimpsky

Odpowiedz

5

Otrzymujesz błąd czasu kompilacji, chyba że zastąpisz je w swojej klasie Zoo.

java: class defaultMethods.Zoo inherits unrelated defaults for eat() from types Pet and Animal 

Najnowszym i najbardziej atrakcyjnym jdk jest here btw. I składnia powinna być

default void eat(){ 
    System.out.println("Animal Start eating ...."); 
} 
+0

super :) więc w tym przypadku obie metody (z Animal & Pet) są aktualizowane? dobrze? – Freak

+0

niezaktualizowany, nadpisany – NimChimpsky

+0

ostatnia rzecz, to znaczy, że jeśli mamy domyślne konkretne metody o tej samej nazwie, to powinniśmy zastąpić domyślną metodę? w przeciwnym razie jest to błąd czasu kompilacji? – Freak

Powiązane problemy