2013-04-12 34 views
7

Trong một cuộc thảo luận, một người bạn của tôi cho tôi biết rằng concrete methods would be allowed in java 1.8 in interfaces thì tại thời điểm đó một câu hỏi được đưa ra trong đầu tôi, nếu chúng được cho phép thì chúng ta sẽ phân biệt các phương pháp như thế nào. Ví dụ:
Tôi có hai giao diện Animal.javaPet.java và cả hai đều có phương pháp cụ thể cùng tức eat()
phương pháp cụ thể trong các giao diện Java1.8

public interfaces Animal{ 

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

    public interfaces Pet{ 

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

Bây giờ Zoo.java tôi thực hiện cả hai và không ghi đè

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

Bây giờ đây là confusion.How của tôi, tôi có thể gọi một phương thức cụ thể về inteface animal sử dụng Test đối tượng

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

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

Bất kỳ lời đề nghị? hoặc là có bất kỳ giải pháp cho điều này trong java1.8 như tôi không thể tìm thấy câu trả lời của nó.

+0

nhưng tôi không tìm thấy câu trả lời này trong những question.If nó là một bản sao sau đó xin vui lòng hướng dẫn cho tôi về vấn đề này resolvation – Freak

+0

này có thể là của itnerest quá, phương pháp tĩnh không được thừa hưởng trong giao diện http://stackoverflow.com/q/14646027/106261 – NimChimpsky

+0

câu hỏi ban đầu của bạn được trả lời ở đây http://stackoverflow.com/a/7857884/106261 – NimChimpsky

Trả lời

5

Bạn nhận được một lỗi thời gian biên dịch, trừ khi bạn ghi đè lên ăn trong lớp Zoo của bạn.

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

Jdk mới nhất và gọn gàng nhất là here btw. Và cú pháp nên

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

tuyệt vời :) vì vậy trong trường hợp này cả hai phương pháp (từ Animal & Pet) được cập nhật? đúng? – Freak

+0

không được cập nhật, ghi đè – NimChimpsky

+0

một điều cuối cùng, Điều đó có nghĩa là nếu chúng ta có các phương thức cụ thể mặc định có cùng tên thì chúng ta nên ghi đè phương thức mặc định? nếu không nó là một lỗi thời gian biên dịch? – Freak

Các vấn đề liên quan