2016-02-27 4 views
0

Я учусь интерфейс Java и я нашел что-то странное ...статический метод внутри интерфейса - Java

Дано интерфейс:

public interface Worker { 

    public void doWork(); 
    static void aTestStatic() { 
     System.out.println("I can be called within the Interface!"); 
    } 


public class Main { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

    Worker.aTestStatic(); 
} 

Это на самом деле работает:

I can be called within the Interface! 

Зачем? Я думал, что в интерфейсах можно только объявлять методы без реализации и, не будучи классом, они не могут быть вызваны, но только реализованы.

Заранее спасибо.

+4

Вы используете java 1.8? https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html –

ответ

3

Как this article объясняет,

Одна из самых больших изменений дизайна в Java 8, с концепцией интерфейсов. До появления Java 7 мы могли иметь только описания методов в интерфейсах. Но из Java 8 мы можем использовать методы по умолчанию и статические методы в интерфейсах.

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

1

Это относительно новая функция Java 8, которая позволяет писать статические реализации в интерфейсах.

До Java 8 программистов были вынуждены определять класс со статическими методами для своего интерфейса, например. Collections, который полностью состоит из статических методов, работающих с различными интерфейсами коллекции.

Добавление статических методов к интерфейсам позволяет программистам сохранять соответствующую функциональность вместе с определением интерфейса, делая код более понятным и поддерживающим.