내부 클래스란? (클래스 내부에서만 사용하려고 선언한다)
: 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 밀접한 연관이 있는 경우가 많고 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 내부 클래스로 선언해서 사용함, 중첩 클래스라고도 부름.
: 종류 ( 인스턴스 내부 클래스, 정적(static) 내부 클래스, 지역(local) 내부 클래스, 익명(anonymous) 내부 클래스
1. 인스턴스 내부 클래스
: 외부 클래스가 생성된 후 생성됨.
: 내부적으로 사용할 클래스를 선언함.
: pirvate이 아닌 내부 클래스는 다른 외부 클래스에서 생성할 수 있음.(private 권장)
-위의 코드를 보면 InClass는 OutClass가 만들어진 후에 만들어지기 때문에
InClass에서 static 변수를 선언하면 사용할 수 없기 때문에 오류가 발생한다.
package Basic_Grammar.chap6.ch01.Test01;
class OutClass{
private int num=10;
private static int sNum=20;
private InClass inClass;
public OutClass() {
inClass=new InClass();
}
// OutClass가 만들어지고 나서 InClass가 만들어진다.
class InClass{
int iNum=100;
void inTest(){
System.out.println("OutClass num="+num+"(외부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum="+sNum+"(외부 클래스의 스태틱 변수)");
System.out.println("InClass num="+iNum+"(내부 클래스의 인스턴스 변수)");
}
}
// OutClass의 매서드
public void usingClass(){
inClass.inTest();
}
}
public class InnerTest {
public static void main(String[] args) {
OutClass outClass=new OutClass();
outClass.usingClass();
}
}
OutClass에서 InClass를 선언할 때 private 접근제한자를 사용하지않으면,
외부에서 OutClass.InClass를 이용할 수 있다.
2. 정적 내부 클래스
package Basic_Grammar.chap6.ch01.Test01;
class OutClass{
private int num=10;
private static int sNum=20;
private InClass inClass;
// OutClass의 매서드
public void usingClass(){
inClass.inTest();
}
static class InStaticClass{
int iNum=100;
static int sInNum=200;
void inTest(){
System.out.println("InClass num="+iNum+"(내부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum="+sNum+"(외부 클래스의 스태틱 변수)");
System.out.println("InClass sInNum="+sInNum+"(내부 클래스의 스태틱 변수)");
}
static void sTest(){
System.out.println("OutClass sNum="+sNum+"(외부 클래스의 스태틱 변수)");
System.out.println("InClass sInNum="+sInNum+"(내부 클래스의 스태틱 변수)");
}
}
}
public class InnerTest {
public static void main(String[] args) {
// OutClass outClass=new OutClass();
// outClass.usingClass();
OutClass.InStaticClass sInClass=new OutClass.InStaticClass();
// 정적 내부클래스의 일반 메서드
sInClass.inTest();
// 정적내부 클래스의 정적 메서드
OutClass.InStaticClass.sTest();
}
}
'JAVA > Java2021-2' 카테고리의 다른 글
함수형 프로그래밍 람다식(lambda expression) (0) | 2021.10.11 |
---|---|
내부클래스 (inner class)2 지역(local) 내부, 익명 내부 클래스 (0) | 2021.10.09 |
HashMap 클래스 메서드와 구현실습 (0) | 2021.10.09 |
Comparator는 언제 쓰는가? (0) | 2021.10.09 |
Comparator 구현 (0) | 2021.10.09 |