class test{
public static void main(String args[]) {
Car c = new Car();
FireEngine fe = new FireEngine();
Ambulance ab = new Ambulance();
Bigban bb = new Bigban();
System.out.println("car instanceof FireEngine : "+ (c instanceof FireEngine));
System.out.println("fe instanceof Car : " + (fe instanceof Car));
// System.out.println("ab instanceof FireEngine : "+ (ab instanceof FireEngine));
System.out.println("car instanceof ab : "+ (c instanceof Ambulance));
System.out.println("bb instanceof Car : " + (bb instanceof Car));
Car c2 = fe;
System.out.println("c2 instanceof FireEngine : " + (c2 instanceof FireEngine));
System.out.println("c2 instanceof Ambulance : " + (c2 instanceof Ambulance));
}
}
class Car {}
class FireEngine extends Car {}
class Ambulance extends Car{}
class Bigban extends Ambulance{}
์คํ๊ฒฐ๊ณผ
์ค๋ช
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐฉ์ฐจ, ๊ตฌ๊ธ์ฐจ๋ ์ฐจ์ ์์ฑ์ ๊ฐ์ง ์์๋ค์ด๋ค.
์ด๋ ์ด ์๋ฐฉ์ฐจ์์ ์ฐจ์ ์์ฑ๋ง ๊ฐ์ง๋ c2 ์ฐธ์กฐ๋ณ์๋ฅผ ๋ง์ฝ ๋ค๋ฅธ ํจ์์์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ ธ์ค๊ฒ ๋๋ค๋ฉด,
์ด๋, ์ฐจ๋ ์๋ฐฉ์ฐจ์ธ์ง ๊ตฌ๊ธ์ฐจ์ธ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด์ instanceof๋ฅผ ์ฌ์ฉํ๊ณ ,
์ด๋ ํ์ธ๋ instance๋ฅผ ํตํด์ ๊ทธ ์ธ์คํด์ค์ method์๋ ์ ๊ทผ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
์์ฝ
ํ์ฅ๋ ์์ ์ธ์คํด์ค๋ฅผ ์กฐ์ ์ธ์คํด์ค๋ก ๋๊ฒจ ๋ฐ์์ ๋, ๋ค์ ์ด๋ค ์์ ์ธ์คํด์ค์์ ์จ ๊ฒ์ด๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด์ ์ฌ์ฉ
์์๋ก ์ดํดํ๋ ํธ์ด ๋น ๋ฅด๋ค.
class Product {
int price;
int bonusPoint;
}
class Tv extends Product {}
class Computer {}
class buyer {
void buy(Tv) {/*same code*/}
void buy(Computer) {/*same code*/}
}
๋์ ์ Tv์ Computer์ ๋ชจ๋ Product์ ์์๋์๊ธฐ ๋๋ฌธ์
์๋์ ๊ฐ์ด ๊ฐํธํ๊ฒ ํ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ค.
class Product {
int price;
int bonusPoint;
}
class Tv extends Product {}
class Computer {}
class buyer {
void buy(Product p){
money -= p.price;
bonusPoint += p.bonusPoint;
}
}
๋งค๊ฒจ๋ณ์์ ์ ์ธ๋ ํ์
์ ์์๋ค์ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์ฌ ์ ์๋ค๋ ์ ์ด
๋งค๊ฐ๋ณ์์ ๋คํ์ฑ์ ๋ํ๋ธ๋ค.
์์
class Product {
int price;
int bonusPoint;
Product(int price) {
this.price = price;
bonusPoint = (int)(price/10.0);
}
}
class Tv1 extends Product {
Tv1() { super(100);}
//์กฐ์ ์์ฑ์์ ์ ๊ทผํ์ฌ price ์ค์
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("no money");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
System.out.println(p + " is buyed");
}
}
class Ex7_8 {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv1());
b.buy(new Computer());
System.out.println("Current money : " + b.money);
System.out.println("Current bonusPoint" + b.bonusPoint);
}
}
๋งค๊ฐ๋ณ์ ๋คํ์ฑ๊ณผ ๋น์ทํ๊ฒ,
๋์ผํ ์กฐ์์ ๊ฐ์ง ์์๋ค์ ์กฐ์ ํด๋์ค ๋ฐฐ์ด๋ก ๋ฌถ์ด์ ์ฌ์ฉํ ์ ์๋ค.
class Product {}
class Tv extends Product{}
class Computer extends Product{}
class Audio extends Product{}
Product p[] = new Product[3];
p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();
์์๋ก,
Product[] cart = new Product[10];์ ๊ฐ์ด product cart๋ฅผ ์ค์ ํ์ฌ
๊ตฌ๋งคํ ๋ฌผ๊ฑด๋ค์ listํ๋ ๋ฐฐ์ด์ ์ ์ธํ ์ ์๋ค.
TMI
class array์ ๊ฒฝ์ฐ, ๋ฐฐ์ด ๊ฐ์๋ฅผ ์ ๋์ ์ผ๋ก ์กฐ์ ํด ์ฃผ๋ vector class๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
(๋ค์ ๋์ฌ ๋ฏ...)
๋ฏธ์์ฑ๋ ํด๋์ค : ๋ฏธ์์ฑ ๋งค์๋๋ฅผ ํฌํจํ๊ณ ์๋ค๋ ์๋ฏธ์ด๋ค.
abstract class ํด๋์ค์ด๋ฆ{
//methods
//instance variables
}
๋ฉ์๋๊ฐ ์์๋ฐ์ ํด๋์ค์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์, ์กฐ์ ํด๋์ค์์๋ ์ ์ธ๋ง ํจ
ํ์
abstract returnType methodName();
์ถ์ํด๋์ค๋ฅด ์์ ๋ฐ์ ์์ ํด๋์ค๋, OVERRIDING์ ํตํด์ abstract method๋ฅผ ๊ตฌํํจ
(ํ๋๋ผ๋ ์์ฑ๋์ง ์์ผ๋ฉด ์์ํด๋์ค ์ญ์ ์ถ์ํด๋์ค๋ก ์ง์ ํด์ผํจ)
abstract class Player{
abstract void play(int pos);
abstract void stop();
}
//์ถ์ ๋งค์๋ ๋ชจ๋ overriding
class AudioPlayer extends Player{
void play(int pos) { /* method */}
void stop() { /* method */}
}
//์ถ์ ๋ฉ์๋ ์ผ๋ถ๋ง overriding
abstract class AbstracPlter extends Player{
void play(int pos) { /* method */}
}
- ์ถ์ํ
๊ธฐ์กด ํด๋์ค์ ๊ณตํต๋ถ๋ถ์ ๋ฝ์๋ด์ ์กฐ์ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ณผ์
- ์์๊ณ์ธต๋๋ฅผ ๋ฐ๋ผ ๋ด๋ ค๊ฐ์๋ก ํด๋์ค๋ ์ ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด ๊ตฌ์ฒดํ์ ์ ๋๊ฐ ์ฌํด์ง
- ์์๊ณ์ธต๋๋ฅผ ๋ฐ๋ผ ์ฌ๋ผ๊ฐ์๋ก ํด๋์ค๋ ์ถ์ํ์ ์ ๋๊ฐ ์ฌํด์ง
์์
abstract class Unit{
int x, y;
abstract void move(int x, int y);
void stop() {};
}
class Marine extends Unit{
void move(int x, int y) {}
void stimPack() {}
}
class Tank extends Unit{
void move(int x, int y) {}
void changeMode() {}
}
class Dropship extends Unit{
void move(int x, int y) {}
void load(){}
void unload(){}
}
์กฐ์ํด๋์ค์ ์ถ์๋ฉ์๋ move๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ก ํด์ํ ์ ์๋ค.
move๋ฉ์๋๊ฐ ์ถ์๋ฉ์๋๋ก ์ ์ธ๋จ์ผ๋ก์ ์์ผ๋ก Unit class์์ ์์๋ฐ์์ ์์ฑ๋๋ ํด๋์ค๋ move๋ฉ์๋๋ฅผ ์์ ์ ํด๋์ค์ ์๋ง๊ฒ ๊ตฌํํด์ผ ํ๋ค๋ ์๋ฏธ๊ฐ ๋ด๊ฒจ์๋ค.
์ข์ ๊ธ ๊ฐ์ฌํฉ๋๋ค.