본문 바로가기

JAVA/기본다지기

JAVA 17일차 필기

내부 클래스(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