자바 학습 시리즈 (23) 자바 대상 의 내부 클래스 에 대한 상세 한 설명


전재 출처 를 밝 혀 주 십시오:http://blog.csdn.net/lhy_ycu/article/details/45372395
 
머리말
 
내부 클래스 는 기생 클래스 라 고도 부 르 는데 하 나 를 클래스 에 넣 고 (즉 내부 클래스 의 상위 프로그램 단원 은 클래스) 외부 클래스 의 구성원 으로 정의 하 는 것 이다.내부 클래스 는 주로 몇 가지 정의 형식 으로 정적 (static) 내부 클래스, 비 정적 내부 클래스, 익명 내부 클래스 (즉 이름 이 없 는 기생 클래스) 를 사용한다.내부 류 의 장점 은 내부 류 가 외부 류 (사유 포함) 구성원 을 직접 할 수 있 고 그렇지 않 으 면 안 된다 는 것 이다.다음은 자바 의 내부 클래스 사용 과 몇 가지 정의 형식의 상호 호출 을 실례 를 통 해 상세 하 게 설명 하 겠 습 니 다.
 
2. 실례 설명
 
(1) 익명 내부 클래스: 프로그램 이 익명 내부 클래스 를 만 들 때 익명 내부 클래스 (실현 클래스) 의 인 스 턴 스 를 즉시 만 듭 니 다.
 
interface IBreathe {
	void breathe();
}

/**
 *         ,      :
 * 
 * new   () |      ){ 
 * 		//     ... 
 * };
 * 
 * @author [*    *] [email protected]
 * @since version 1.0
 * @datetime 2015 4 29    10:17:40
 */

public class Anonymous {

	//           IBreathe      ,            
	//                ,      
	IBreathe breathe = new IBreathe() {
		//               
		@Override
		public void breathe() {
			System.out.println("      ...");
		}
	};

	public static void main(String[] args) {
		Anonymous anonymous = new Anonymous();
		anonymous.breathe.breathe();
	}
}

 
다음 과 같은 몇 가 지 를 주의 하 십시오. 1) 부모 류 가 추상 류 나 하나의 인터페이스 라면 그 하위 클래스 의 방법 은 모두 익명 내부 류 를 사용 하여 실현 할 수 있 습 니 다.반대로 익명 내부 클래스 를 사용 하 는 데 는 부모 클래스 를 계승 하거나 인 터 페 이 스 를 실현 해 야 한 다 는 전제 가 있다.2) 익명 내부 클래스 는 인터페이스 나 추상 클래스 의 모든 추상 적 인 방법 을 실현 해 야 한다.3) 익명 내부 클래스 는 한 번 에 사용 할 클래스 를 만 드 는 데 적합 합 니 다.4) 익명 의 내부 클래스 는 구조 기 가 있 을 수 없고 프로그램 이 나중에 접근 할 수 없습니다. 클래스 이름 이 없 기 때 문 입 니 다.
 
(2) 정적 내부 클래스: 외부 클래스 (숙주 클래스) 의 정적 구성원 에 속 하기 때문에 외부 클래스 의 비 정적 구성원 (속성, 방법) 에 접근 할 수 없습니다.
 
/**
 *    (   )                    
 * 
 * @author [*    *] [email protected]
 * @since version 1.0
 * @datetime 2015 4 29    11:00:51
 */

public class Out {
	private static String name = "  ";
	private String sex = " ";

	static class In {
		private static String name = "  ";

		public void info() {
			//                   ,            
			// System.out.println("    sex = " + sex);
			System.out.println("in info     ,name:" + name);
		}
	}

	public static void main(String[] args) {
		//     (         ):in info     ,name:  
		//                      
		//   In    Out.     
		new In().info();
		new Out.In().info();
	}
}

 
외부 클래스 밖에서 정적 내부 클래스 에 접근 하려 면: Out. In = new Out. In ();in.info();물론 정적 내부 클래스 도 하위 클래스 를 보 낼 수 있 습 니 다: class InSub extends Out. In {}, 작성 과 호출 방식 은 일반 클래스 와 마찬가지 로 더 이상 군말 하지 않 습 니 다.다음은 비 정적 내부 클래스 의 정의 와 사용 에 중점 을 두 고 살 펴 보 겠 습 니 다.
 
(3) 비정 상 내부 클래스: 비정 상 내부 클래스 의 인 스 턴 스 를 만 들 기 전에 외부 클래스 인 스 턴 스 를 만들어 야 합 니 다. 즉, 비정 상 내부 클래스 는 외부 클래스 의 인 스 턴 스 (Outer. this) 에 기생 해 야 합 니 다.따라서 비정 상 내부 클래스 의 인 스 턴 스 를 만 들 기 전에 외부 클래스 의 인 스 턴 스 를 만들어 야 합 니 다.
 
/**
 *          
 * 
 * @author [*    *] [email protected]
 * @since version 1.0
 * @datetime 2015 4 29    11:26:06
 */

public class Outer {
	int number = 10;

	//         
	class Inner {
		int number = 100;

		public void info() {
			int number = 1000;
			System.out.println("Inner    info()     ~");
			System.out.println("number     :" + number);//        ,   1000
			System.out.println("number     :" + this.number);//        ,   100
			System.out.println("number     :" + Outer.this.number);//        ,   10
		}
	}

	/**
	 *                  (  、  )
	 */
	public void info() {
		System.out.println("Outer    info()     ~");
		Inner inner = new Inner();
		inner.info();
		System.out.println(inner.number);
	}

	public static void main(String[] args) {
		new Outer().info();
	}
}

외부 클래스 밖에서 내부 클래스 를 사용 하면 비정 상 내부 클래스 의 인 스 턴 스 를 만 들 기 전에 외부 클래스 의 인 스 턴 스 를 만들어 야 합 니 다.Outer outer = new Outer(); Outer.Inner in = outer.new Inner(); 등가 = = "Outer. Inner in2 = new Outer (). new Inner ();
 
물론 비 정적 내부 클래스 도 출산 자 류 를 파견 할 수 있 습 니 다. 다음 과 같 습 니 다.
 
//          
class InnerSub extends Outer.Inner {
	public InnerSub() {
		//   Outer.Inner       ,      "    "        
		new Outer().super();
	}}

 
 
 
3. 총화
 
1) static 수식 이 있 는 내부 클래스 는 외부 클래스 자체 에 속 하고 static 수식 이 없 는 내부 클래스 는 클래스 실례 에 속한다.
2) 방법 이 누구의 것 인지 기억 하고 그 사람 이 사용한다.
3) static 수식 이 없 는 내부 클래스, ['외부 클래스' 의 인 스 턴 스 에 기생 해 야 합 니 다];반대로 외부 류 자체 에 기생 한다.
4) 정적 내부 클래스 는 클래스 자체 에 기생 하기 때문에 프로그래머 가 숙주 를 상대 할 필요 가 없다. -외부 클래스 를 정적 내부 클래스 의 가방 으로 생각하면 됩 니 다.
5) 비 정적 내부 클래스 의 하위 클래스: 하위 클래스 의 구조 기 는 부모 클래스 구조 기 를 한 번 호출 해 야 하기 때문에 하위 클래스 구조 기 에서 숙주 대상 을 사용 하여 구조 기 를 호출 해 야 합 니 다.
 
종결 어
 
자바 의 내부 클래스 에 대한 정의 와 사용 기본 내용 은 다음 과 같 습 니 다. 정규 표현 식, 자바 성능 최적화, JVM 학습 등 이 있 습 니 다. 주목 하 시기 바 랍 니 다.

좋은 웹페이지 즐겨찾기