자바 노트 - 정적 내부 클래스 / 내부 클래스
[정적 내부 클래스] 클래스 성명 에 'static' 키 워드 를 포함 하 는 내부 클래스 입 니 다.다음 예제 코드 와 같이:
public class InnerClass {
private static String nickName = "anan";
private String name;
private int age;
public InnerClass(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public static class Inner
{
private String heart = "zhaoli";
public String getHeart()
{
return heart;
}
public void setHeart(String h)
{
this.heart = h;
}
public void print()
{
System.out.println(InnerClass.nickName);
System.out.println(getHeart());
}
}
}
public class InnerClassTest {
public static void main(String[] args)
{
InnerClass.Inner inner = new InnerClass.Inner();
inner.print();
inner.setHeart("simple-simply");
inner.print();
}
}
테스트 출력:
ananzhaolianansimple-simply
이것 은 Public 가 수식 하 는 정적 내부 클래스 가 외부 클래스 의 사용 과 크게 다 르 지 않다 는 것 을 설명 합 니 다. 'OuterClass. InnerClass' 의 방식 으로 이러한 수식 하 는 정적 내부 클래스 를 참조 합 니 다. <정적 구성원 클래스 특성 >
< 정적 구성원 클래스 제약 조건 >
정적 구성원 클래스 B 를 A 의 보조 클래스 로 언제 사용 하고 A 에 만 사용 할 때 B 를 A 의 정적 구성원 클래스 로 정의 할 수 있 습 니까?예 를 들 어 JDK 의 LinkedList 클래스 에는 Entry 정적 멤버 클래스 가 있 습 니 다.
public class LinkedList<E> extends AbstractSequentialList<E>
…;
private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
Entry(E element, Entry<E> next, Entry<E> previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}
…;
}
분명히
LinkedList
링크 목록
자체 사용.
[비정 상 내부 클래스]
정적 구성원 클래스
'키 워드 는 멤버 클래스 가 됩 니 다.
public class InnerClass {
private static String nickName = "anan";
private String name;
private int age;
public InnerClass(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public class Inner
{
private String heart = "zhaoli";
public String getHeart()
{
return heart;
}
public void setHeart(String h)
{
this.heart = h;
}
public void print()
{
System.out.println(InnerClass.nickName);
System.out.println(InnerClass.this.name);
System.out.println(InnerClass.this.age);
System.out.println(getHeart());
}
}
}
public class InnerClassTest {
public static void main(String[] args)
{
InnerClass outer = new InnerClass("simply-simple", 23);
InnerClass.Inner inner = outer.new Inner();
inner.print();
}
}
테스트 출력:
anansimply-simple23zhaoli
외부 클래스 와 유사 한 인 스 턴 스 함수, 구성원 클래스 에는 Public / private / default 이 있 습 니 다.
권한 수정자
하나의 구성원 클래스 인 스 턴 스 는 반드시 외부 클래스 인 스 턴 스 에 속 합 니 다. 구성원 클래스 는 외부 클래스 의 모든 인 스 턴 스 필드 와 인 스 턴 스 함수 에 접근 할 수 있 습 니 다.하나의 구성원 클래스 인 스 턴 스 는 반드시 외부 클래스 에 속 하 는 인 스 턴 스 입 니 다. 그러면 어떻게 구성원 클래스 내부 에서 외부 클래스 인 스 턴 스 를 얻 습 니까?예시 코드 에서 보 듯 이 "OuterClass. this" 를 사용 합 니 다.
'라 는 형식 이다.
내부 클래스 인 스 턴 스 가 속 한 외부 클래스 인 스 턴 스 를 지정 합 니 다.
내부 클래스 인 스 턴 스 는 외부 클래스 의 인 스 턴 스 방법 에서 만 들 수 있 습 니 다. 내부 클래스 인 스 턴 스 가 속 한 외부 인 스 턴 스 를 새로 만 듭 니 다.
일부 인 스 턴 스 는 자 연 스 럽 게 외부 인 스 턴 스 를 만 드 는 방법 에 대응 하 는 외부 인 스 턴 스 입 니 다.
또한 예제 코드 에서 보 듯 이 주어진 외부 클래스 인 스 턴 스 outerClass 에 대해 내부 클래스 인 스 턴 스 를 직접 만 들 수 있 습 니 다. 문법 형식 은 다음 과 같 습 니 다.
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
< 멤버 클래스 제약 조건 >
멤버 클래스 는 언제 사용 하나 요?
구성원 류 의 현저 한 특성 은 구성원 류 가 외부 클래스 의 인 스 턴 스 를 방문 할 수 있 는 임의의 필드 와 방법 이다.하나의 유형 이 대외 적 으로 공공 인 터 페 이 스 를 제공 하 는 실현 을 편리 하 게 하 는 것 은 구성원 류 의 전형 적 인 응용 이다.JDK Collection 라 이브 러 리 의 경우 각 Collection 클래스 는 클 라 이언 트 가 하나의 Collection 인 스 턴 스 를 통일 적 으로 수행 할 수 있 도록 해당 하 는 Iterator 를 제공 해 야 합 니 다.각 Collection 류 의 Iterator 구현 은 이 Collection 류 의 구성원 류 로 정의 된다.예 를 들 어 JDK 에서 AbstractList 류 의 코드 세 션:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
private class Itr implements Iterator<E> {
………;
}
public Iterator<E> iterator() {
return new Itr();
}
}
AbstractList 에 정 의 된 Itr 는 AbstractList 의 임의의 필드 와 방법 을 방문 할 수 있 기 때문에 Iterator 를 실현 하기 편리 하고 AbstractList 가 외부 에 더 많은 인 터 페 이 스 를 노출 하지 않 아 도 됩 니 다.
구성원 클래스 메커니즘 이 없 으 면 Abastractlist 소스 코드 외 에 Iterator 를 실현 하 는 클래스 Itr 만 정의 합 니 다. 이 클래스 는 AbstractList 인 스 턴 스 구성원 list 가 있 습 니 다. Itr 가 목록 의 내부 정 보 를 가 져 와 서 옮 겨 다 닐 수 있 도록 AbstractList 는 반드시 Itr 에 추가 접근 인 터 페 이 스 를 개방 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.