클래스 내부에 클래스를 선언한 경우를 내부 클래스라고 한다
OutClass outClass=new OutClass( );
OutClass.InClass inClass=outClass.new InClass();
class OutClass{
private int num=10;
private static int sNum=20;
private InClass inClass;
public OutClass() {
inClass = new InClass();
}
private class InClass{
int iNum = 100;
void inTest(){
System.out.println("OutClass num = "+num+"(외부 클래스 의 인스턴스 변수)");
System.out.println("OutClass sNum = "+sNum+"(외부 클래스의 스태틱 변수)");
System.out.println("InClass inNum = "+iNum+ "(내부 클래스의 인스턴스 변수)");
}
}
public void usingClass(){
inClass.inTest();
}
}
public class InnerTest {
public static void main(String[] args) {
OutClass outClass=new OutClass();
outClass.usingClass();
}
}
class OutClass{
private int num=10;
private static int sNum=20;
private InClass inClass;
public OutClass() {
inClass = new InClass();
}
private class InClass{
int iNum = 100;
void inTest(){
System.out.println("OutClass num = "+num+"(외부 클래스 의 인스턴스 변수)");
System.out.println("OutClass sNum = "+sNum+"(외부 클래스의 스태틱 변수)");
System.out.println("InClass inNum = "+iNum+ "(내부 클래스의 인스턴스 변수)");
}
}
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 sNum = "+sInNum+ "(내부 클래스의 스태틱 변수)");
}
static void sTest(){
System.out.println("OutClass sNum = "+sNum+"(외부 클래스의 스태틱 변수)");
System.out.println("InClass sNum = "+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();
}
}