2014-12-25 2 views
5

Если у меня есть два интерфейса с одним и тем же методом по умолчанию, и оба они реализуются с классом/См. Эту программу.Что происходит, если два интерфейса содержат один и тот же метод по умолчанию?

interface alpha { 
    default void reset() { 
    System.out.println("This is alpha version of default"); 
    } 
} 

interface beta { 
    default void reset() { 
    System.out.println("This is beta version of default"); 
    } 
} 

class MyClass implements alpha, beta { 
    void display() { 
    System.out.println("This is not default"); 
    } 
} 

class main_class { 
    public static void main(String args[]) { 
    MyClass ob = new MyClass(); 
    ob.reset(); 
    ob.display(); 
    } 
} 

что произойдет? А также я получаю несвязанную ошибку с этой программой.

+0

Интерфейс является чистым абстрактным и только декларациями, а не реализациями. – Shriram

+0

@Shriram В Java 8 они могут содержать реализации с использованием методов по умолчанию –

+4

Я подозреваю, что «несвязанная ошибка» сообщает вам ответ на этот вопрос. – chrylis

ответ

6

Вы не можете реализовать несколько интерфейсов, имеющих такую ​​же сигнатуру методов Java 8 по умолчанию (без переопределения явно в дочернем классе)

. Вы можете решить это, реализуя метод, например.

class MyClass implements alpha, beta { 
    void display() { 
    System.out.println("This is not default"); 
    } 

    @Override 
    public void reset() { 
    //in order to call alpha's reset 
    alpha.super.reset(); 
    //if you want to call beta's reset 
    beta.super.reset(); 

    } 
} 
+0

Когда я пытаюсь запустить вышеуказанный код с помощью метода '@ override', то получение ошибки' не может найти символ @ переопределить'. –

+0

@ManoharKumar '@ Override' с капиталом O. – 11684

+0

Итак, чтобы вызвать альфа-версию' reset() 'method, какой оператор мы должны использовать в' @Override public void reset() {} 'code. –

0

В сущности, эти два метода одинаковы в классе, который реализует them.If вы пытаетесь реализовать два метода в Intellij, например, вы можете получить только один метод. Вы не можете объявить эти два, даже если вы хотите иметь разные подписи для них обоих.

Смежные вопросы