2010-03-13 2 views
4

자바를 배우고 있습니다. 복합 디자인 패턴을 사용하려고합니다. 논리를 따라 을 사용하려고합니다. 폴더 클래스에서배열 목록에 자바 인터페이스를 저장하십시오.

Item -> interface 
Folder -> class 
File -> class 

(:) 나는 그것이 아주 기본적인 것을 알고 웃지 마) I 파일 정보를 저장하는 항목의 ArrayList를 만들 수 있습니까?

ArrayList<Item> info = ArrayList<Item>(); 

아니면 폴더 Arraylist를 사용해야합니까?

ArrayList<Folder> info = ArrayList<Folder>(); 

어떤 변수 단지 함수 정의가 없기 때문에 인터페이스는 실제 데이터를 저장할 수 있는지 모르겠어요. 이 댓글에 관해서 초보자 :

답변

4

당신은 (일부 문법 교정과) 둘 다 할 수

List<Item> info = new ArrayList<Item>(); 

을 돕는

감사 :

내가 알고하지 않습니다 인터페이스는 함수 정의 만 변수가 없으므로 실제 데이터를 저장할 수 있습니다.

인터페이스는 함수 정의를 제공하는 것 이상을 수행합니다. 가장 중요한 것은 유형을 정의합니다. 위와 같이 선언 된 infoItem 유형의 개체 목록입니다. 이러한 객체는 데이터를 저장할 수 있습니다. 일례로서

다음 고려해

interface Item { ... } 
class Folder implements Item { ... } 

Item it = new Folder(); 

이제 itItem이다 Folder의 인스턴스를 지칭한다.

+0

Folder 클래스에있는 모든 변수 정보를 저장할 수 있습니까 ?? ?? – user238384

+0

인터페이스는 정적 필드 만 정의 할 수 있습니다. 이는 사용자가 의도하지 않은 것일 수 있습니다. 실제로 인스턴스 변수를 상속하는 것은 인터페이스에서는 이해할 수 없습니다. 구현이 아닌 type_를 상속 받기를 원합니다. – polygenelubricants

1

FolderFile은 모두 Item을 구현하는 한 올바르게 작동합니다. 그러나 Folder 또는 File에만 해당하는 속성이 아닌 Item 인터페이스에 정의 된 속성에 대한 액세스 권한 만 가질 수 있습니다.

당신이 설명한대로,이 데이터 구조의 사용에 대해 더 많이 알지 못해도 말하기는 어렵지만 문제에 접근하는 것이 합리적 인 방법처럼 들립니다.

1

당신은 확실히 Items의 ArrayList를 만들 수 있습니다. Item이 인터페이스로서 인스턴스 변수를 가지지 않는 것은 문제가되지 않습니다. 그러나 만들 수있는 유일한 항목은 "그냥"항목이 아닙니다. 항목 인터페이스가 implements 인 일부 클래스의 인스턴스가됩니다. 예를 들어, Folder와 File이 모두 Item 인터페이스를 구현하면 폴더와 파일을 ArrayList에 넣을 수 있습니다. 그러나 ArrayList는 Items를 보유하기 위해 선언되며, 인터페이스를 구현하기 때문에 폴더와 파일이 모두 적합합니다. 항목입니다.

1

인터페이스는 데이터를 저장할 수 없습니다. 인터페이스는 파일 및 폴더 클래스가 구현하는 계약으로 사용할 수있는 유형입니다. 파일 및 폴더 클래스는 모두 Item 인터페이스를 구현하므로 항목 유형을 허용하는 List에 파일 및 폴더 객체를 추가 할 수 있습니다.

List<Item> info = new ArrayList<Item>()