내부 클래스(Inner Class)
새로운 패키지 ch18innerclass 생성 , 새로운 클래스 L01InnerClass.java 생성
package com.javalesson.ch18innerclass;
class OutClass{
int intVal = 0;
class InnerClass{//내부클래스
int intVal = 10;
public void innerMethod(){
int intVal = 100;
System.out.println("innerMethod().intVal = "+intVal);//지역변수는 바로 불러온다
System.out.println("innerClass.intVal = "+ this.intVal);//전역변수는 this로 접근
System.out.println("OutClass.intVal = "+ OutClass.this.intVal);//외부클래스의 전역변수 접근
}//method end
}//InnerClass end
}//OutClass end
public class L01InnerClass {
public static void main(String[] args){
new OutClass().new InnerClass().innerMethod();
}//main end
}//class end
새로운 클래스 L02StaticInnerClass.java 생성
package com.javalesson.ch18innerclass;
class OutPrint{
public void println(String a){
System.out.println(a);
}
public void println(int a){
System.out.println(a);
}
public void println(boolean a){
System.out.println(a);
}
}
class OuterClass{
int val = 0;
static int staticVal = 50;
public static final OutPrint out = new OutPrint();
static class StaticClass{
int val = 0; //사용하지 않기를 권장
//static 클래스가 가지는 변수는 static이 적합하다
static int staticVal = 500;
StaticClass(){}//생성자는 가질 수 있지만 new 연산자로 생성자를 호출할 수 없다.
public void a(){
System.out.println("StaticClass.a() 호출");
}//a() end
public static void method(){
System.out.println("StaticClass.staticVal = "+staticVal );
//System.out.println("StaticClass.val = "+val);//불가능
System.out.println("InClass.val = "+new OuterClass().new InClass().val);
System.out.println("OuterClass.val = "+new OuterClass().val);
System.out.println("OuterClass.staticVal = "+OuterClass.staticVal );
}
}//StaticClass end
class InClass{
int val = 10;
}//Inclass end
public void method(){
System.out.println("StaticClass.staticVal = "+OuterClass.StaticClass.staticVal );
//System.out.println("StaticClass.val = "+OuterClass.StaticClass.val);//불가능
System.out.println("InClass.val = "+new OuterClass().new InClass().val);
System.out.println("OuterClass.val = "+this.val);
System.out.println("OuterClass.staticVal = "+OuterClass.staticVal );
System.out.println();
}
}//OuterClass end
public class L02StaticInnerClass {
public static void main(String[] args){
//OuterClass.method()
new OuterClass().method();
//static으로 선언되지 않은 클래스는 main에서 new연산자로 실행하기 전까진 뼈밖에 없다
//static으로 선언된 내부 클래스는 컴파일 시 메모리에 할당되기 때문
OuterClass.StaticClass.method();
//StaticClass.method()
OuterClass.out.println("A");
}//main end
}//class end
InnerClass로 추상클래스 해결하기 (링크)
'JAVA > 기본다지기' 카테고리의 다른 글
JAVA 19일차 필기 (1) | 2016.09.01 |
---|---|
JAVA 18일차 필기 (1) | 2016.08.31 |
JAVA 16일차 필기 (1) | 2016.08.29 |
[JAVA] 재미로 만든 로또번호 추첨기 (3) | 2016.08.29 |
JAVA 15일차 필기 (0) | 2016.08.26 |