interface
이 무엇인지, 또는 적어도 어떻게 사용하는지 다소 혼란스러워 할 것 같습니다. Java의 interface
은 implements
인터페이스가 제공해야하는 클래스 (또는 abstract
)의 메소드 서명 세트를 정의합니다. ArrayList
은 List
인터페이스를 구현하는 클래스 중 하나입니다.
List<Integer> nums = ArrayList<Integer>()
당신은 List
의 모든 메소드를 구현 ArrayList
의 인스턴스를 생성하고, List
를 구현하는 객체를 보유 할 수있는 변수에 할당 : 다음을 수행합니다. 즉, nums
을 사용하는 경우 List
에 의해 노출 된 메소드에만 액세스 할 수 있습니다. 그러나 실제로 이라는 메서드는 입니다.
Java는 interfaces
을 사용하도록 권장합니다. 특정 상속 체인에 바인딩되어 있지 않기 때문입니다. 다음과 같은 방법 서명을 고려하십시오
public <T> void foo(List<T> input)
public <T> void bar(ArrayList<T> input)
List
를 구현 무엇을 할 수 foo
방법; ArrayList
또는 LinkedList
과 같은 표준 라이브러리 객체 중 하나 일 수도 있고 표준 List
작업 외에도 완전히 다른 기능을 제공하는 사용자 정의 클래스 일 수도 있습니다.이렇게하면 훨씬 더 유연 해집니다. foo
은 단순히 보이는 개체가 List
처럼 보이지만 실제로 그 개체가 무엇인지 신경 쓰지 않는다고 말하는 것입니다. 한편, bar
방법은 ArrayList
을 직접 사용합니다. 나중에 다른 컬렉션을 사용하려는 경우 ArrayList
또는 ArrayList
까지만 확장 할 수 있으므로 사용할 수 없습니다.
"List (Collection)도 메서드 구현을 가지고 있습니다. (add(), get()') *"우리에게 보여 줄 수 있습니까? (BTW, 선언! = 구현)? 또한 Java 8 인터페이스에는'기본 메소드 (http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html) '이 있지만'List'에서'add()'와'get() '그들 중 하나가 아닙니다. – Pshemo
인터페이스가 실제로 무엇인지 혼란스러워합니다. – Dave
목록에 구현이 없습니다. 그렇지 않으면 List을 작성할 수 있습니다. nums = List (); 대신 (작동하지 않을 것이다). –
DuKes0mE