내부클래스
람다식에서는 익명클래스가 사용된다.
내부클래스란 ?
클래스 내부에 구현한 클래스 (중첩된 클래스)
클래스 내부에서 사용하기 위해 선언하고 구현하는 클래스이다.
주로 외부 클래스 생성자에서 내부 클래스를 생성한다.
클래스 외부에서 쓸일이 없고 내부에서만 쓰일거면 내부에서 만든다
나중에 익명내부 클래스(이름이없는) 를 배울 때 종종쓴다.
package innerclass;
class OutClass { // 외부클래스
private int num = 10; // 멤버 변수
private static int sNum = 20; // 정적 변수
private InClass inClass; // 내부클래스 선언
public OutClass() {
inClass = new InClass(); // 주로 생성자에서 내부클래스를 생성한다
}
class InClass { // 생성이후에 안에 쓸수있는데 static 키워드는 생성없이 쓸수있다. 그래서 static클래스라 하면 문제가없다.
int iNum = 100;
// static int sInNum = 200;
void inTest() {
System.out.println(num); // 외부클래스의 private 변수를 사용할수있다.
System.out.println(sNum);// 외부클래스의 static 변수를 사용할수있다.
}
}
public void usingInner() {
inClass.inTest(); // 내부에 있는 변수메소드를 호출할수있다.
}
static class InStaticClass {
//static 클래스는 out클래스 생성여부 상관없이 쓸수있다.
int inNum = 100;
static int sInNum = 200;
void inTest() { // static클래스 안에 일반메소드가 있다.
System.out.println(inNum);
System.out.println(sInNum);
System.out.println(sNum);
}
static void sTest() { // static 클래스 내부에 static 메소드를 만들수있다.
// 일반 클래스 내부에는 static메소드를 만들수없다
// System.out.println(inNum); satic 메소드는 static 변수만 가져올수있다.왜?
// static만 올수있다.
System.out.println(sInNum);
System.out.println(sNum);
}
}
}
public class InnerTest {
public static void main(String[] args) {
OutClass outClass = new OutClass();
outClass.usingInner(); // 출력한 변수를 확인
OutClass.InClass myInClass = outClass.new InClass();
// inClass를 바로 접근할수있다. 외부클래스가 먼저 만들어져야한다. 외부참조변수를 이용하여 내부클래스를 만들수있다.
// 근데 내부클래스가 private으로 만들면 접근할수가 없다.
myInClass.inTest();
System.out.println();
// 그럼 내부클래스에 있는 static 클래스는 어떻게 호출할수있을까 ?
OutClass.InStaticClass sInClass = new OutClass.InStaticClass();
// 바로 static 클래스를 생성할수있다.
sInClass.inTest();
// 일반메소드는 내부클래스 참조변수를 통해 참조가 가능하다
OutClass.InStaticClass.sTest();
// static메소드는 static클래스를 통해서도 바로 호출할수있다.
}
}
'JAVA Programming' 카테고리의 다른 글
[73] 람다식 이란? (0) | 2020.07.20 |
---|---|
[72] 익명내부클래스 , 지역내부클래스 (0) | 2020.07.20 |
[70] 컬렉션 프레임워크 요약정리 (0) | 2020.07.20 |
[69] Map 에서의 HashMap 과 TreeMap (0) | 2020.07.20 |
[68] HashSet 으로 관리해보기 (0) | 2020.07.20 |