자바 학습 시리즈 (23) 자바 대상 의 내부 클래스 에 대한 상세 한 설명
4774 단어 자바 학습 시리즈
전재 출처 를 밝 혀 주 십시오: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 학습 등 이 있 습 니 다. 주목 하 시기 바 랍 니 다.