클래스 내부에 구현한 클래스( 중첩된 클래스 )
클래스 내부에서 사용하기 위해 선언하고 구현하는 클래스
주로 외부 클래스 생성자에서 내부 클래스를 생성
내부클래스 유형
Code
package innerclass;
class OutClass{
//인스턴스 내부 클래스
//멤버변수를 선언하는 부분
private int num=10;
private static int sNum=20;
private InClass inClass;
//인너 클래스 생성시기
//아웃클래스의 콘스트럭트에서 많이 생성
public OutClass() {
inClass = new InClass();
}
class InClass{
int iNum = 100;
//사용불가
// static int sInNum = 200;
void inTest() {
System.out.println(num);
System.out.println(sNum);
}
}
public void usingInner() {
inClass.inTest();
}
//static으로 선언하고 나서 사용이가능하다. 인스턴스 생성시점에 대한 개념을 이해하고 보면 쉽다.
static class InStaicClass{
int inNum = 100;
static int sInNum= 200;
void inTest() {
System.out.println(inNum);
System.out.println(sInNum);
System.out.println(sNum);
}
static void sTest() {
//사용불가
// System.out.println(inNum);
System.out.println(sInNum);
System.out.println(sNum);
}
}
}
public class InnerTest {
public static void main(String[] args) {
OutClass outClass = new OutClass();
outClass.usingInner();
//outclass 인위적으로 만든 것->private 경우 접근 불가
OutClass.InClass myInClass = outClass.new InClass();
myInClass.inTest();
System.out.println();
OutClass.InStaicClass sInClass = new OutClass.InStaicClass();
sInClass.inTest();
OutClass.InStaicClass.sTest();
}
}
지역내부클래스
package innerclass;
class Outer{
int outNum = 100;
static int sNum=200;
//지역변수의 유효범위- 메소드가 호출되서 종료될때까지만의 유효
//상수화
Runnable getRunnable(int i) {
int num = 100;
//지역내부 클래스
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println(num);
System.out.println(i);
System.out.println(outNum);
System.out.println(Outer.sNum);
}
}
return new MyRunnable();
}
}
public class LocalInnerClassTest {
public static void main(String[] args) {
Outer outer = new Outer();
Runnable runnable = outer.getRunnable(50);
runnable.run();
}
}
AnonymousInnerClassTest
package innerclass;
class Outer2{
int outNum = 100;
static int sNum=200;
//지역변수의 유효범위- 메소드가 호출되서 종료될때까지만의 유효
//상수화
Runnable getRunnable(int i) {
int num = 100;
//지역내부 클래스
return new Runnable() {
@Override
public void run() {
System.out.println(num);
System.out.println(i);
System.out.println(outNum);
System.out.println(Outer.sNum);
}
};
}
Runnable runner = new Runnable() {
@Override
public void run() {
System.out.println("test");
}
};
}
//익명이너클래스 -위젯핸들링 텍스트박스 할때 사용-> 상수화된 값들이 넘어와서 사용된다
public class AnonymousInnerClassTest {
public static void main(String[] args) {
Outer2 outer = new Outer2();
Runnable runnable = outer.getRunnable(50);
outer.runner.run();
runnable.run();
}
}
반응형
'JAVA' 카테고리의 다른 글
스트림(Stream) (0) | 2019.10.15 |
---|---|
람다식 (0) | 2019.10.14 |
Map인터페이스 (2) | 2019.10.12 |
Comparable 인터페이스와 Comparator 인터페이스 (0) | 2019.10.11 |
set 인터페이스 (0) | 2019.10.10 |