2009-10-11 2 views
2

중첩 클래스의/예는 언제 사용해야합니까? 그에게 "모델이 올 때

그래서 내 자바 책이 중첩 된 클래스에 대한 전체 장을 가지고 관련되는 언어를 포함하는이 질문에 태그를 다시,하지만 당신은 정말 그들을 사용한다 노트에 종료하십시오 구성 관계 및 숨기기를 원하는 클래스의 내부 구현 "을 선택하십시오. 따라서 중첩 클래스와 몇 가지 예제를 사용할 때 토론하십시오.

+0

사이드 노트 : MS Java에서 대리인을 소개하는 Sun의 응답에 대한 흥미로운 기사 (링크 없음, 미안)가 있습니다. 그것의 요지는 중첩 된 클래스가 델리게이트보다 잘 작동한다는 것입니다. 이것은 MS가 MS를 고소하고 궁극적으로 .NET과 C#으로 이끄는 쟁점 중 하나였습니다. (내 생각에 중첩 된 클래스에 대한 내 생각이 합쳐져서 좋은 결과는 나오지 않습니다.) - 012) –

+0

가능한 복제본 [왜/언제 네 스팅 된 클래스를 .net에서 사용해야합니까? 또는하지 않아야합니까?] (http://stackoverflow.com/questions/48872/why-when-should-you-use-nested-classes-in-net-or-shouldnt-you) – nawfal

답변

3

중첩 된/내부 클래스는 고유 한 클래스 파일이없는 다른 클래스의 컨텍스트에서만 특별히 사용되는 클래스입니다. 인스턴스에 링크 된 경우 상위 클래스 인스턴스의 컨텍스트에서만 인스턴스화 할 수 있습니다. 개인 데이터 또는 정적 클래스 인 경우 개인 정적 데이터 만 볼 수 있습니다. 사용의 http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

몇 가지 예 :

:

  • 는 인터페이스의 구체적인 구현을 숨기기

    자바 개발자 사이트는 하나의 예와 중첩 된 클래스 자습서를 가지고 (Hibernate와 같은 도구에 대한 데이터베이스 세션 생각) : 당신이 Session 인터페이스를 가지고 있다고 가정하고, SessionFactory가 Sessio의 인스턴스를 리턴한다고 가정하자. 엔. Session 인터페이스를 구현하는 SessionImpl 구상 클래스는 그것을 구성하고 초기화하는 방법을 알고있는 팩토리의 내부 클래스 일 수 있습니다. 인터페이스를 구현

    • 용품 정보 : 개찰 웹 프레임 워크

    각 GUI 요소는 누구의 일 구성 요소로 데이터를 연결하는 연관된 "모델"을 갖는다.

    public interface IModel extends IDetachable { 
    public Object getObject(); 
    public Object setObject(); 
    } 
    

    당신이 작성한 사용자 정의 GUI 구성 요소에 대한 데이터를 검색 할 특별한 논리가 있다고 가정 : 인터페이스는 같이 보입니다. 다른 구성 요소는 데이터를 동일한 방식으로 검색하지 않으므로 데이터 검색을 처리하기 위해 IModel이 제공된 지점에서 익명 클래스를 사용할 수 있습니다. IModel 구현을 재사용해야하는 동일한 클래스에 다른 점이 있다면 내부 클래스로 만들 수 있습니다. 나중에 다른 곳에 모델이 필요하면 최상위 클래스로 변환 할 수 있습니다.

    일반적으로 클래스 정의가 필요한 상황에서는 내부 클래스를 사용하지만 해당 클래스는 부모 클래스의 컨텍스트에서만 사용 가능하거나 의미가 있습니다.

3

실제 설정은 중첩 된 클래스로 전역 설정 개체에있었습니다.

상위 클래스는 설정 범주로 중첩 된 클래스가있는 Singleton이었습니다.

  • 설정
    • 파일 설정을
    • 인쇄 설정
    • 자신의 것으로, 별도의 클래스로 내부 개체를 만드는 실제적인 점은 없었다

설정 클래스 범위 밖에서는 사용할 수 없습니다.

2

많은 인수가있는 메소드로 일반적으로 수행되는 알고리즘을 캡슐화하기 위해 중첩 클래스를 사용합니다. 원시 데이터를 가진 클래스를 사용하고 중첩 클래스 (partial 키워드 사용)에 알고리즘을 별도의 파일로 저장합니다. 그런 식으로 알고리즘에 대한 속성을 넣을 수 있으며 알고리즘이 완료된 후 데이터가 작동합니다. 중첩 된 클래스가 없어도 쉽게 할 수 있지만 알고리즘이 의도적으로 부모 클래스 용으로 작성 되었기 때문에이 느낌이 옳다는 것을 알고 있습니다.

public partial class Network 
    { 
      partial void initFDLF() 
      { 
       fdlf=new FDLF(this); 
      } 

     public FDLF fdlf; 
     public class FDLF 
     { 
      internal bool changed=true; 
      internal bool pvchange=true; 
      public double epsilon = 0.001; 
      public bool fdlfOk=false; 
      public void init(){...} 
      public void run(){...} 
      ... 
+0

질문에 " 언어 불가지론 자 "꼬리표, 부분 종류는 단지 안으로 존재한다. 넷 –

관련 문제