이전 연구를 통해 우리는 클래스가 멤버 변수 와 메서드라는 두 가지 중요한 멤버를 가질 수 있다는 것을 이미 알고 있습니다. 실제로 클래스에는 내부 클래스라는 한 종류의 멤버도 있습니다. 클래스가 다른 클래스를 정의하는 경우, 그러한 클래스를 내부 클래스 라고 부르고, 내부 클래스를 포함하는 클래스를 내부 클래스의 외부 클래스 라고 합니다.
1) 내부 클래스의 외부 클래스의 멤버 변수는 내부 클래스에서도 유효하며 내부 클래스의 메서드도 외부 클래스의 메서드를 호출할 수 있습니다.
2) 내부 클래스의 클래스 본문에서는 클래스 변수와 클래스 메서드를 선언할 수 없습니다. 외부 클래스의 클래스 본문에서는 내부 클래스를 사용하여 객체를 외부 클래스의 멤버로 선언할 수 있습니다.
3) 내부 클래스는 외부 중첩 클래스에서만 사용할 수 있습니다. 다른 클래스는 특정 클래스의 내부 클래스를 사용하여 객체를 선언할 수 없습니다.
내부 클래스의 외부 클래스의 멤버 변수는 내부 클래스에서도 유효하므로 내부 클래스와 외부 클래스 간의 상호 작용이 매우 편리합니다.
예를 들어:
classRedCowForm{staticStringformName;RedCowcow;//내부 클래스 선언 객체 RedCowForm(){}RedCowForm(Strings){cow=newRedCow(88,66,2000);formNa me=s;}publicvoidshowCowMess(){cow.speak();}classRedCow{//내부 클래스 선언 StringcowName=calf;intheight,weight,price;RedCow(inth,intw,in tp){height=h;weight=w;price=p;}voidspeak(){System.out.println(저는 +cowName+, height+height+cm, Weight+weight+kg, +formName에 거주합니다);} }}공개 cclassMain{publicstaticvoidmain(String[]args){RedCowFormform=newRedCowForm(dotcpp farm);form.showCowMess();form.cow.speak();}}
실행 결과는 다음과 같습니다.
저는 키가 88cm이고 몸무게가 66kg입니다. 나는 키가 88cm이고 몸무게가 66kg입니다.
참고 : Java 컴파일러에 의해 생성된 내부 클래스의 바이트코드 파일 이름은 일반 클래스 이름과 다릅니다. 내부 클래스에 해당하는 바이트코드 파일의 이름 형식은 " 임베디드 클래스 이름 $ 내부 클래스 이름 "입니다. 예를 들어 위 예제에서 내부 클래스의 바이트코드 파일 이름은 RedCowForm$RedCow.class여야 합니다.
내부 클래스는 정적 내부 클래스로 수정될 수 있습니다. 정적 내부 클래스는 임베디드 클래스의 정적 데이터 유형입니다. 프로그램은 다른 클래스의 정적 내부 클래스를 사용하여 객체를 생성할 수 있습니다.
좋아요, 누구나 컴퓨터로 실험을 하고 이 섹션의 내용을 소화하고 흡수할 수 있습니다.