예제 7-1
public class CaptionTvTest {
public static void main(String[] args) {
CaptionTv ctv = new CaptionTv();
ctv.power();
ctv.channel = 10;
ctv.channelUp();
System.out.println(ctv.channel);
ctv.display("Hello World");
ctv.caption = true;
ctv.display("Hello World2");
}
}
class Tv {
boolean power;
int channel;
void power() {power = !power;}
void channelUp() {channel++;}
void channelDown() {channel--;}
}
class CaptionTv extends Tv {
boolean caption;
void display(String text) {
if(caption) {
System.out.println(text);
}
}
}
11
Hello World2
예제7-2
public class DrawShape {
public static void main(String[] args) {
Point[] p = {
new Point(100, 100),
new Point(140, 50),
new Point(200, 100)
};
Triangle t = new Triangle(p);
Circle c = new Circle(new Point(150, 150), 50);
t.draw();
c.draw();
}
}
class Shape {
String color = "black";
void draw() {
System.out.printf("[color=%s]%n", color);
}
}
class Point {
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
Point() {
this(0, 0);
}
String getXY() {
return "(" + x + "," + y + ")"; // x와 y의 값을 문자열로 반환
}
}
class Circle extends Shape {
Point center;
int r;
Circle() {
this(new Point(0, 0), 100);
}
Circle(Point center, int r) {
this.center = center;
this.r = r;
}
void draw() {
System.out.printf("[center=(%d, %d), r=%d, color=%s]%n", center.x, center.y, r, color);
}
}
class Triangle extends Shape {
Point[] p = new Point[3];
Triangle(Point[] p) {
this.p = p;
}
void draw() {
System.out.printf("[p1=%s, p2=%s, p3=%s, color=%s]%n",
p[0].getXY(),p[1].getXY(), p[2].getXY(), color);
}
}
[p1=(100,100), p2=(140,50), p3=(200,100), color=black]
[center=(150, 150), r=50, color=black]
예제7-3
public class DeckTest {
public static void main(String[] args) {
Deck d = new Deck();
Card c = d.pick();
System.out.println(c);
d.shuffle();
c = d.pick(0);
System.out.println(c);
}
}
class Deck {
final int CARD_NUM = 52;
Card cardArr[] = new Card[CARD_NUM];
Deck() {
int i = 0;
for (int k = Card.KIND_MAX; k > 0; k--) { // 4
for (int n = 0; n < Card.NUM_MAX; n++) { //13
cardArr[i++] = new Card(k, n + 1);
}
}
// for(int i =0 ; i < CARD_NUM ; i++) {
// cardArr[i++] = new Card(Card.KIND_MAX-i/Card.NUM_MAX, i%Card.NUM_MAX+1);
// }
}
// cardArr[10] ?? 무늬, 숫자
// diamond J 23
// heart J 36
//Clover J 49 50 51
Card pick(int index) {
return cardArr[index];
}
Card pick() {
return pick((int) (Math.random() * CARD_NUM));
}
void shuffle() {
for (int i = 0; i < cardArr.length; i++) {
int r = (int) (Math.random() * CARD_NUM);
Card temp = cardArr[i];
cardArr[i] = cardArr[r];
cardArr[r] = temp;
}
}
}
class Card {
static final int KIND_MAX = 4;
static final int NUM_MAX = 13;
static final int SPADE = 4;
static final int DIAMOND = 3;
static final int HEART = 2;
static final int CLOVER = 1;
int kind;
int number;
Card() {
this(SPADE, 1);
}
Card(int kind, int number) {
this.kind = kind;
this.number = number;
}
public String toString() {
String[] kinds = { "", "CLOVER", "HEART", "DIAMOND", "SPADE" };
String numbers = "0123456789XJQK"; // 숫자 10은 X로 표현
return "kind : " + kinds[this.kind] + ", number : " + numbers.charAt(this.number);
} // toString()의 끝
} // Card클래스의 끝
kind : SPADE, number : X
kind : DIAMOND, number : K
예제 7-4
class Tv {
boolean power;
int channel;
void power() { power = !power; }
void channelUP() { ++channel; }
void channelDown() { --channel; }
}
class VCR {
boolean power;
int counter = 0;
void power() { power = !power; }
void play() { }
void stop() { }
void rew() { }
void ff() { }
}
class TVCR extends Tv {
VCR vcr = new VCR();
void play() {
vcr.play();
}
void stop() {
vcr.stop();
}
void rew() {
vcr.rew();
}
void ff() {
vcr.ff();
}
}
예제7-5
public class SuperTest {
public static void main(String[] args) {
Child c = new Child();
c.method();
}
}
class Parent {
int x=10;
}
class Child extends Parent {
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + this.x);
System.out.println("super.x="+ super.x);
}
}
x=10
this.x=10
super.x=10
예제7-6
public class SuperTest2 {
public static void main(String[] args) {
Child c = new Child();
c.method();
}
}
class Parent {
int x=10;
}
class Child extends Parent {
int x=20;
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + this.x);
System.out.println("super.x="+ super.x);
}
}
x=20
this.x=20
super.x=10
예제7-7
public class PointTest {
public static void main(String[] args) {
Point3D p3 = new Point3D(1,2,3);
}
}
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
String getLocation() {
return "x :" + x + ", y :"+ y;
}
}
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
String getLocation() {
return "x :" + x + ", y :" + y + ", z :" + z;
}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Implicit super constructor Point() is undefined. Must explicitly invoke another constructor
at mypack.Point3D.<init>(PointTest.java:25)
at mypack.PointTest.main(PointTest.java:5)
예제7-8
class PointTest2 {
public static void main(String[] args) {
Point3D p3 = new Point3D();
System.out.println("p3.x="+ p3.x);
System.out.println("p3.y="+ p3.y);
System.out.println("p3.z="+ p3.z);
}
}
class Point {
int x = 10;
int y = 20;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
class Point3D extends Point {
int z = 30;
Point3D() {
this(100, 200, 300);
}
Point3D(int x, int y, int z) {
super(x, y);
this.z = z;
}
}
p3.x=100
p3.y=200
p3.z=300
예제7-9
pacakge com.codechobo.book;
public class PackageTest {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
예제7-10
public class ImportTest {
public static void main(String[] args) {
Date today = new Date();
SimpleDateFormat date = new SimpleDateFormat("yyyy/mm/dd");
SimpleDateFormat time = new SimpleDateFormat("hh:mm:ss a");
System.out.println("오늘 날짜는 " + date.format(today));
System.out.println("현재 시간은 " + time.format(today));
}
}
오늘 날짜는 2021/30/26
현재 시간은 05:30:19 오전
예제7-11
import static java.lang.System.out;
import static java.lang.Math.*;
public class StaticImportEx1 {
public static void main(String[] args) {
// System.out.println(Math.random());
out.println(random());
// System.out.println("Math.PI :"+Math.PI);
out.println("Math.PI :" + PI);
}
}
0.16729015202127595
Math.PI :3.141592653589793
예제7-12
class Card {
final int NUMBER;
final String KIND;
static int width = 100;
static int height = 250;
Card(String kind, int num) {
KIND = kind;
NUMBER = num;
}
Card() {
this("HEART", 1);
}
public String toString() {
return KIND + " " + NUMBER;
}
}
class FinalCardTest {
public static void main(String[] args) {
Card c = new Card("HEART", 10);
// c.NUMBER = 5;
System.out.println(c.KIND);
System.out.println(c.NUMBER);
System.out.println(c);
}
}
HEART
10
HEART 10
예제7-13
public class TimeTest {
public static void main(String[] args) {
Time t = new Time(12, 35, 30);
System.out.println(t);
// t.hour = 13;
t.setHour(t.getHour() + 1); // 13을들고오고싶으면 getHour 바꾸고싶으면 setHour
System.out.println(t);
}
}
// VO, Component
class Time {
private int hour, minute, second;
boolean power;
public Time(int hour, int minute, int second) {
super();
this.hour = hour;
this.minute = minute;
this.second = second;
}
public boolean isPower() {
return power;
}
public void setPower(boolean power) {
this.power = power;
}
public int getHour() { return hour; }
public void setHour(int hour) {
if(hour < 0 || hour > 23) return;
this.hour = hour;
}
public int getMinute() { return minute; }
public void setMinute(int minute) {
if(minute < 0 || minute > 59) return;
this.minute = minute;
}
public int getSecond() { return second;}
public void setSecond(int second) {
if (second < 0 || second > 59) return;
this.second = second;
}
public String toString() {
return hour + ":" + minute + ":" + second;
}
}
12:35:30
13:35:30
예제7-14
final class Singleton {
private static Singleton s = new Singleton();
private Singleton() {
//...
}
public static Singleton getInstance() {
if(s==null)
s = new Singleton();
return s;
}
}
class SingletonTest{
public static void main(String[] args) {
// Singleton s = new Singleton();
Singleton s = Singleton.getInstance();
}
}
예제7-15
public class CastingTest1 {
public static void main(String[] args) {
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
fe.water();
car = (Car)fe; //Car타입의 참조형변수라고 명시하지 않아도 된다.
// car.water();
fe2 = (FireEngine) car;
fe2.water();
}
}
class Car {
String color;
int door;
void drive() {
System.out.println("drive, brrrr~");
}
void stop() {
System.out.println("stop!!!");
}
}
class FireEngine extends Car {
void water() {
System.out.println("water!!!");
}
}
water!!!
water!!!
예제7-16
class CastingTest2 {
public static void main(String[] args) {
Car car = new Car();
Car car2 = null;
FireEngine fe = null;
car.drive();
fe = (FireEngine)car;
fe.drive();
car2 = fe;
car2.drive();
}
}
drive, brrrr~
Exception in thread "main" java.lang.ClassCastException: a210719.Car cannot be cast to a210719.FireEngine
at a210719.CastingTest2.main(CastingTest2.java:10)
예제7-17
public class InstanceofTest {
public static void main(String[] args) {
FireEngine fe = new FireEngine();
if(fe instanceof FireEngine) {
System.out.println("This is a FireEngine instance.");
}
if(fe instanceof Car) {
System.out.println("This is a Car instance.");
}
if(fe instanceof Object) {
System.out.println("This is an Object instance.");
}
System.out.println(fe.getClass().getName());
}
}// class
class Car {}
class FireEngine extends Car{}
This is a FireEngine instance.
This is a Car instance.
This is an Object instance.
FireEngine
예제7-18
public class BindingTest {
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x);
p.method();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent {
int x = 100;
void method() {
System.out.println("Parent Method");
}
}
class Child extends Parent {
int x = 200;
void method() {
System.out.println("Child Method");
}
}
p.x = 100
Child Method
c.x = 200
Child Method
예제7-19
class BindingTest2 {
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x);
p.method();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent {
int x = 100;
void method() {
System.out.println("Parent Method");
}
}
class Child extends Parent {
}
p.x = 100
Parent Method
c.x = 100
Parent Method
예제7-20
class BindingTest3 {
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x);
p.method();
System.out.println();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent {
int x = 100;
void method() {
System.out.println("Parent Method");
}
}
class Child extends Parent {
int x = 200;
void metohd() {
System.out.println("x=" + x);
System.out.println("super.x=" + super.x);
System.out.println("this.x=" + this.x);
}
}
p.x = 100
Parent Method
c.x = 200
Parent Method
예제7-21
class Product{
int price;
int bonusPoint;
Product(int price) {
this.price = price;
bonusPoint = (int)(price/10.0);
}
}
class Tv extends Product {
Tv() {
super(100);
}
public String toString() { return "Tv"; }
}
class Computer extends Product {
Computer() { super(200); }
public String toString() { return "Computer"; }
}
class Buyer {
int money = 1000;
int bonusPoint = 0;
void buy(Product p) {
if(money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
System.out.println(p + "을/를 구입하셨습니다.");
}
}
class PolyArgumentTest {
public static void main(String[] args) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
System.out.println("현재 남은 돈은 " + b.money + "만원입니다.");
System.out.println("현재 보너스 점수는" + b.bonusPoint + "점입니다.");
}
}
Tv을/를 구입하셨습니다.
computer을/를 구입하셨습니다.
현재 남은 돈은 700만원입니다.
현재 보너스 점수는30점입니다.
예제7-22
class Product {
int price;
int bonusPoint;
Product(int price) {
this.price = price;
bonusPoint = (int) (price / 10.0);
}
Product() {
}
}
class Tv extends Product {
Tv() {
super(100);
}
public String toString() {
return "Tv";
}
}
class Computer extends Product {
Computer() {
super(200);
}
public String toString() {
return "Computer";
}
}
class Audio extends Product {
Audio() {
super(50);
}
public String toString() {
return "Audio";
}
}
class Buyer {
int money = 1000;
int bonusPoint = 0;
Product[] item = new Product[10];
int i = 0;
void buy(Product p) {
if (money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
item[i++] = p;
System.out.println(p + "을/를 구입하셨습니다.");
}
void summary() {
int sum = 0;
String itemList = "";
for (int i = 0; i < item.length; i++) {
if (item[i] == null)
break;
sum += item[i].price;
itemList += item[i] + ", ";
}
System.out.println("구입하신 물품의 총금액은 " + sum + "만원입니다.");
System.out.println("구입하신 제품은 " + itemList + "입니다.");
}
}
class PolyArgumentTest2 {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
b.buy(new Audio());
b.summary();
}
}
Tv을/를 구입하셨습니다.
Computer을/를 구입하셨습니다.
Audio을/를 구입하셨습니다.
구입하신 물품의 총금액은 350만원입니다.
구입하신 제품은 Tv, Computer, Audio, 입니다.
예제7-23
import java.util.*;
class Product {
int price;
int bonusPoint;
Product(int price) {
this.price = price;
bonusPoint = (int)(price/10.0);
}
Product() {
price = 0;
bonusPoint = 0;
}
}
class Tv extends Product {
Tv() { super(100); }
public String toString() { return "Tv"; }
}
class Computer extends Product {
Computer() { super(200); }
public String toString() { return "computer"; }
}
class Audio extends Product {
Audio() { super(50); }
public String toString() { return "Audio"; }
}
class Buyer {
int money = 1000;
int bonusPoint = 0;
Vector<Product> item = new Vector<Product>();
void buy(Product p) {
if(money < p.price) {
System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
item.add(p);
System.out.println(p + "을/를 구입하셨습니다.");
}
void refund(Product p) {
if(item.remove(p)) {
bonusPoint -= p.bonusPoint;
System.out.println(p + "을/를 반품하셨습니다.");
} else { System.out.println("구입하신 제품 중 해당 제품이 없습니다.");
}
}
void summary() {
int sum = 0;
String itemList ="";
if(item.isEmpty()) {
System.out.println("구입하신 제품이 없습니다.");
return;
}
for(int i = 0; i < item.size();i++) {
Product p = (Product)item.get(i);
sum += p.price;
itemList += (i==0) ? "" + p : ", " + p;
}
System.out.println("구입하신 물품의 총금액은 " + sum + "만원입니다.");
System.out.println("구입하신 제품은 "+ itemList + "입니다.");
}
}
public class PolyArgumentTest3 {
public static void main(String[] args) {
Buyer b = new Buyer();
Tv tv = new Tv();
Computer com = new Computer();
Audio audio = new Audio();
b.buy(tv);
b.buy(com);
b.buy(audio);
b.summary();
System.out.println();
b.refund(com);
b.summary();
}
}
Tv을/를 구입하셨습니다.
computer을/를 구입하셨습니다.
Audio을/를 구입하셨습니다.
구입하신 물품의 총금액은 350만원입니다.
구입하신 제품은 Tv, computer, Audio입니다.
computer을/를 반품하셨습니다.
구입하신 물품의 총금액은 150만원입니다.
구입하신 제품은 Tv, Audio입니다.
예제7-24
public class FighterTest {
public static void main(String[] args) {
Fighter f = new Fighter();
Fightable fightable = new Fighter();
if(f instanceof Unit) {
System.out.println("f는 Unit의 자손입니다");
}
if(f instanceof Fightable) {
System.out.println("f는 Fightable인터페이스를 구현했습니다");
}
if(f instanceof Attackable) {
System.out.println("f는 Attackable인터페이스를 구현했습니다");
}
if(f instanceof Movable) {
System.out.println("f는 Movable인터페이스를 구현했습니다");
}
if(f instanceof Object) {
System.out.println("f는 Object클래스의 자손입니다");
}
}
}
class Fighter extends Unit implements Fightable {
public void attack(Unit u) {
// 내용생략
}
public void move(int x, int y) {
// 내용생략
}
}
class Unit {
int currentHP;
int x;
int y;
}
interface Fightable extends Movable, Attackable{}
interface Movable { void move(int x, int y); }
interface Attackable { void attack(Unit u); }
f는 Unit의 자손입니다
f는 Fightable인터페이스를 구현했습니다
f는 Attackable인터페이스를 구현했습니다
f는 Movable인터페이스를 구현했습니다
f는 Object클래스의 자손입니다
예제7-25
interface Parseable {
public abstract void parse(String fileName);
}
class ParserManager {
public static Parseable getParser(String type) {
if (type.equals("XML")) {
return new XMLParser();
} else {
Parseable p = new HTMLParser();
return p;
}
}
}
class XMLParser implements Parseable {
@Override
public void parse(String fileName) {
System.out.println(fileName + "- XML parsing completed.");
}
}
class HTMLParser implements Parseable {
@Override
public void parse(String fileName) {
System.out.println(fileName + "-HTML parsing completed.");
}
}
class parserTest {
public static void main(String args[]) {
Parseable parser = ParserManager.getParser("XML");
parser.parse("document.xmml");
parser = ParserManager.getParser("HTML");
parser.parse("document2.html");
}
}
예제7-26
public class RepairableTest {
public static void main(String[] args) {
Tank tank = new Tank();
Dropship dropship = new Dropship();
Marine marine = new Marine();
SCV scv = new SCV();
scv.repair(tank);
scv.repair(dropship);
// scv.repair(marine);
}
}
interface Repairable{}
class Unit {
int hitPoint;
final int MAX_HP;
Unit(int hp) {
MAX_HP = hp;
}
//...
}
class GroundUnit extends Unit {
GroundUnit(int hp) {
super(hp);
}
}
class AirUnit extends Unit {
AirUnit(int hp) {
super(hp);
}
}
class Tank extends GroundUnit implements Repairable {
Tank() {
super(150);
hitPoint = MAX_HP;
}
public String toString() {
return "Tank";
}
//...
}
class Dropship extends AirUnit implements Repairable {
Dropship() {
super(125);
hitPoint = MAX_HP;
}
public String toString() {
return "Dropship";
}
//...
}
class Marine extends GroundUnit {
Marine() {
super(40);
hitPoint = MAX_HP;
}
//...
}
class SCV extends GroundUnit implements Repairable{
SCV() {
super(60);
hitPoint = MAX_HP;
}
void repair(Repairable r) {
if (r instanceof Unit) {
Unit u = (Unit)r;
while(u.hitPoint!=u.MAX_HP) {
u.hitPoint++;
}
System.out.println( u.toString() + "의 수리가 끝났습니다.");
}
//...
}
}
Tank의 수리가 끝났습니다.
Dropship의 수리가 끝났습니다.
예제7-27
class A {
public void methodA(B b) {
b.methodB();
}
}
class B {
public void methodB() {
System.out.println("methodB()");
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.methodA(new B());
}
}
methodB()
예제7-28
class A {
void autoPlay(I i) {
i.play();
}
}
interface I {
public abstract void play();
}
class B implements I {
public void play() {
System.out.println("play in B class");
}
}
class C implements I {
public void play() {
System.out.println("play in C class");
}
}
class InterfaceTest2 {
public static void main(String[] args) {
A a = new A();
a.autoPlay(new B());
a.autoPlay(new C());
}
}
play in B class
play in C class
예제7-29
public class InterfaceTest3 {
public static void main(String[] args) {
A a = new A();
a.methodA();
}
}
class A {
void methodA() {
I i = InstanceManager.getInstance();
i.methodB();
System.out.println(i.toString());
}
}
interface I {
public abstract void methodB();
}
class B implements I {
public void methodB() {
System.out.println("methodB in B class");
}
public String toString() {
return "class B";
}
}
class InstanceManager {
public static I getInstance() {
return new B();
}
}
methodB in B class
class B
예제7-30
public class DefaultMethodTest {
public static void main(String[] args) {
Child c = new Child();
c.method1();
c.method2();
MyInterface.staticMethod();
MyInterface2.staticMethod();
}
}
class Child extends Parent implements MyInterface, MyInterface2 {
public void method1() {
System.out.println("method1() in Child"); // 오버라이딩
}
}
class Parent {
public void method2() {
System.out.println("method2() in Parent");
}
}
interface MyInterface {
default void method1() {
System.out.println("method1() in MyInterface");
}
default void method2() {
System.out.println("method2() in MyInterface");
}
static void staticMethod() {
System.out.println("staticMethod() in MyInterface");
}
}
interface MyInterface2 {
default void method1() {
System.out.println("method1() in MyInterface2");
}
static void staticMethod() {
System.out.println("staticMethod() in MyInterface2");
}
}
method1() in Child
method2() in Parent
staticMethod() in MyInterface
staticMethod() in MyInterface2
예제 7-31
class InnerEx1 {
class InstanceInner {
int iv = 100;
// static int cv = 100;
final static int CONST = 100;
}
static class StaticIneer {
int iv = 200;
static int cv = 200;
}
void myMethod() {
class LocalInner {
int iv = 300;
// static int cv = 300;
final static int CONST = 300;
}
}
public static void main(String[] args) {
System.out.println(InstanceInner.CONST);
System.out.println(StaticIneer.cv);
}
}
100
200
예제 7-32
class InnerEx2 {
class InstanceInner {
}
static class StaticInner {
}
InstanceInner iv = new InstanceInner();
static StaticInner cv = new StaticInner();
static void staticMethod() {
// InstanceInner obj1 = new InstanceInner();
StaticInner obj2 = new StaticInner();
InnerEx2 outer = new InnerEx2();
InstanceInner obj1 = outer.new InstanceInner();
}
void instanceMethod() {
InstanceInner obj1 = new InstanceInner();
StaticInner obj2 = new StaticInner();
// LocalInner lv = new LocalInner();
}
void myMethod() {
class LocalInner {
}
LocalInner lv = new LocalInner();
}
}
예제7-33
class InnerEx3 {
private int outerIv = 0;
static int outerCv = 0;
class InstanceInner {
int iiv = outerIv;
int iiv2 = outerCv;
}
static class StaticInner {
// int siv = outerIv;
static int scv = outerCv;
}
void myMethod() {
int lv = 0;
final int LV = 0;
class LocalInner {
int liv = outerIv;
int liv2 = outerCv;
int liv3 = lv;
int liv4 = LV;
}
}
}
예제7-34
class Outer {
class InstanceInner {
int iv = 100;
}
static class StaticInner{
int iv = 200;
static int cv = 300;
}
void myMethod() {
class LocalInner {
int iv = 400;
}
}
}
class InnerEx4 {
public static void main(String[] args) {
Outer oc = new Outer();
Outer.InstanceInner ii = oc.new InstanceInner();
System.out.println("ii.iv : "+ ii.iv);
System.out.println("Outer.StaticInner.cv : "+ Outer.StaticInner.cv);
Outer.StaticInner si = new Outer.StaticInner();
System.out.println("si.iv : "+ si.iv);
}
}
ii.iv : 100
Outer.StaticInner.cv : 300
si.iv : 200
예제 7-35
class Outer {
int value = 10;
class Inner {
int value = 20;
void method1() {
int value = 30;
System.out.println("value :" + value);
System.out.println("this.value :" + this.value);
System.out.println("Outer.this.value :" + Outer.this.value);
}
}
}
class InnerEx5 {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.method1();
}
}
value :30
this.value :20
Outer.this.value :10
예제7-36
public class InnerEx6 {
Object iv = new Object () { void method() {} };
static Object cv = new Object() { void method() {} };
void myMethod() {
Object lv = new Object() { void method() {} };
}
}
예제7-37
import java.awt.*;
import java.awt.event.*;
class InnerEx7 {
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(new EventHandler());
}
}
class EventHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred!!!");
}
}
예제7-38
import java.awt.*;
import java.awt.event.*;
class InnerEx8 {
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred!!!");
}
});
}
}