10.14 제 10장 내부클래스 실습
10.14 제 10장 내부클래스 실습
[10-1]
소스코드 |
package Chapter_10;
class Outer { //외부 클래스 class Inner { int iv = 100; //내부클래스(인스턴스 클래스) } }
public class Ex_10_1 { public static void main(String[] args) {
Outer ou = new Outer(); Outer.Inner ii = ou.new Inner(); System.out.println(ii.iv);
}
} |
실행결과 |
100 |
⦁내부클래스의 인스턴스를 생성하기 위해서는 먼저 외부클래스의 인스턴스를 생성해야 한다.
[10-2]
소스코드 |
package Chapter_10;
class Outer1 { //외부 클래스 static class Inner { int iv = 200; //내부클래스(인스턴스 클래스) } }
public class Ex_10_2 { public static void main(String[] args) { Outer1.Inner cv = new Outer1.Inner(); System.out.println(cv.iv);
}
}
//1. 다른 하나의 Outer클래스를 이름을 바꾼다. (Outer -> Outer1) //2. Outer를 클래스 밖에 다른 클래스로 생성 - better //3. 새로운 패캐지를 생성하여 그곳에 정의한다. |
실행결과 |
200 |
⦁static 맴버를 인스턴스 생성 벗이 사용할 수 있는 것처럼
stataic inner class는 인스턴스 클래스와 달리 외부 클래스의 인스턴스를 생성하지 않고도 사용할 수 있다.
[10-3]
소스코드 |
package Chapter_10;
class Outer2 { int value=10;
class Inner { int value = 20; void method1() { int value = 30;
System.out.println(value); System.out.println(this.value); System.out.println(Outer2.this.value);
} } }
public class Ex_10_3 { public static void main(String[] args) {
Outer2 outer = new Outer2(); Outer2.Inner inner = outer.new Inner(); inner.method1(); }
}
|
실행결과 |
30 20 10 |
[10-4]
소스코드 |
package Chapter_10;
//import java.awt.*; //import java.awt.event.*;
import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; //ctlr+shift+o : 자동 import작성
/* public class Ex_10_4 {
public static void main(String[] args) { Frame f = new Frame(); f.addWindowListener(new EventHandler()); } }
class EventHandler extends WindowAdapter { public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); e.getWindow().dispose(); System.exit(0); } } */ public class Ex_10_4 {
public static void main(String[] args) { Frame f = new Frame(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); e.getWindow().dispose(); System.exit(0);
} }); } //main } |
실행결과 |
|
[10-5]
지역클래스에서 외부클래스의 인스턴스 맴버와 static맴버에 모두 접근할 수 있지만,
지역변수는 final이 붙은 상수만 접근할 수 있는 이유는 무엇인가?
왜? 함수가 살아 있는 순간만 지역변수가 존재. 종료와 동시에 소멸.(특징)
클래스에 일반변수의 접근을 허용하면. 함수가 종료되도 변수가 살아 있을 수 있다. 없어진 것을 참조한다. 상수는 어디에나 존재를 하기에 문제가 되지 않는다
소스코드 |
/* 지역클래스에서 외부클래스의 인스턴스 맴버와 static맴버에 모두 접근할 수 있지만, 지역변수는 final이 붙은 상수만 접근할 수 있는 이유는 무엇인가? */
package Chapter_10;
public class Ex_10_5 { public static void main(String[] args) { final int VALUE = 10; Thread t = new Thread(new Runnable() { public void run() { for (int i = 0; i < 10; i++) { try { Thread.sleep(1 * 10000); } catch (InterruptedException e) { } System.out.println(VALUE); } }// run() }); t.start(); System.out.println("main() - 종료."); }// main } |
실행결과 |
main() - 종료. 10 10 10 . . .
|