μ μ€λμ μΊμ€ν μ΄ κ΄ν΄μ 곡λΆλ₯Ό ν΄λ³΄μ.
μΊμ€ν μ μλ°μμ μλΉν μ€μν κ°λ μ΄λΌκ³ ν μ μμΌλ, μ μμλλ κ²μ΄ μ’λ€.
μΊμ€ν μ΄λ?
--->
μΊμ€ν μ, κ°μ²΄κ° κ°μ§κ³ μλ νμ μΌλ‘ νλ³ν νλ κ²μ μλ―Ένλ€.
μΊμ€ν μλ νλ³νκ³Ό κ°μ΄ λ κ°μ§λ‘ λ³ν λ°©λ²μ΄ μ‘΄μ¬νλλ°,
1. κ°μ νλ³ν(λͺ μμ νλ³ν) : κ°μ λ‘ λ³ν μν¬ ννλ‘ λͺ μλ₯Ό ν΄μ£Όλ κ²μΈλ°, μμλ
(νμνμ )μ μΊμ€ν λ νμ νμ κ°μ²΄; μ¦, μ΄λ λ€μ΄μΊμ€ν (down casting)μ μν¬λ μ¬μ©νλ€.
2. μλ νλ³ν(묡μμ νλ³ν) : μλ£νμ μ§μ λͺ μνμ§ μκ³ , μλμ μΌλ‘ μΊμ€ν λλ κ²μ΄λ€.
μμλ λ€μκ³Ό κ°λ€
(μμνμ )νμνμ κ°μ²΄λͺ ;
μμνμ
λͺ
λ³μλͺ
= νμ νμ
κ°μ²΄λͺ
;
μμνμ
λͺ
λ³μλͺ
= (μμνμ
)νμ νμ
κ°μ²΄λͺ
;
μμνμ
λͺ
λ³μλͺ
= new μμ νμ
μμ±μ();
μ°λ¦¬κ° μΊμ€ν μ μ΄μΌκΈ° ν λ, μ£Όλ‘ up μΊμ€ν κ³Ό down μΊμ€ν μ μ΄μΌκΈ°νλ€.
κ·Έλ λ€λ©΄ μ΄κ² λ¬΄μ¨ μλ―ΈμΈμ§ ν λ² μμ보μ.
μ°μ , μ μ₯곡κ°μ΄ κ°μ²΄μ μμνμ μ΄λΌλ©΄ ν΄λΉ κ°μ²΄κ° μμνμ μΌλ‘ νλ³ν λμ΄μΌνλ€.
AλΌλ λΆλͺ¨ ν΄λμ€κ° μκ³ , BλΌλ ν΄λμ€κ° μμν΄λμ€λΌκ³ νμ.
κ·Έλ λ€λ©΄ Bν΄λμ€λ Aν΄λμ€λ₯Ό μμλ°κ³ μμ κ²μ΄λ€.
μ΄λ, B ν΄λμ€μμ μ μΈν κ°μ²΄κ° A ν΄λμ€(λΆλͺ¨)μ νλλ λ©μλλ₯Ό μ¬μ©νκΈ° μν΄μλ
κ°μ²΄νλ₯Ό ν΄μΌν κ²μ΄λ€. νμ§λ§ Bν΄λμ€ λ΄λΆμ μλ κ°μ²΄κ° μλκ³ λΆλͺ¨μ μ 보λ₯Ό λ°μμ€λ κ°μ²΄μ΄λ―λ‘,
λ°λ‘ μ¬μ©ν μ μκ³ νλ³νμ ν΅ν΄ up μΊμ€ν μ ν΄μΌνλ€. κ·Έλ¬κ³ λμ λΆλͺ¨ ν΄λμ€μ νλλ λ©μλλ₯Ό
κ°μ²΄λ‘ λΆλ¬μ€λ κ²μ΄λ€.
down μΊμ€ν μ λ°λλ‘ λΆλͺ¨ ν΄λμ€μ κ°μ²΄ μμ±μ ν λ, μμμ κ²μ μ¬μ©νκΈ° μν΄ down νλ κ²μ΄λΌκ³ μκ°
ν μ μκ² μ§λ§ μ ν κ·Έλ μ§ μκ³ , μ€νλ € up μΊμ€ν μΌλ‘ λ³νλ νμ λ€μ μ볡 μν€λ κ²μ΄ down μΊμ€ν μ΄λ€.
μ΄μ λ, μμμ κ°λ μ μκ³ μλ€λ©΄ μ μΆν μ μλ―μ΄, λΆλͺ¨μ κ²μ μμμκ² μμμμΌ°λ€κ³ ν΄μ, λΆλͺ¨κ° μμμ κ²μ
κ°μ§κ³ μλ κ²μ΄ μλ κ²μ²λΌ, μΊμ€ν λ λ§μ°¬κ°μ§μ΄λ€. λΆλͺ¨ ν΄λμ€λ μμν΄λμ€μ νμ κ³Ό λ©€λ²λ₯Ό κ°μ§μ§ μκΈ°μ,
μΊμ€ν μ νλ κ²μ΄ μλ―Έκ° μλ κ²μ΄λ€.
κ·Έλ λ€λ©΄ μ°λ¦¬κ° castingμ μ¬μ©νλ μ΄μ λ ν¬κ² 무μμΌκΉ?
1. up casting : λ€μν νμ
μ νλ²μ κ΄λ¦¬νκΈ° μν΄μ
2. down casting : up castingλ μμμμ μμ ν΄λμ€μ λ©€λ²λ₯Ό
μ¬μ©ν΄μΌ νλ κ²½μ°
λ§μ§λ§μΌλ‘ κ°μ²΄μ νμ μ΄ μ‘΄μ¬νλμ§ νμΈνκ³ μΆλ€λ©΄ instaceof λ₯Ό μ¬μ©νλ©΄ λλ€
κ°μ²΄μ νμ
νμΈ(instanceof)
a instanceof A : aκ°μ²΄κ° ν΄λμ€ Aμ νμ
μ κ°μ§λ©΄ true, μλλΌλ©΄ false
μ΄μ μμλ₯Ό 보μ.
μ μΊμ€ν κ³Ό λ€μ΄μΊμ€ν μ μ¬μ©νλ κ°μ₯ κΈ°λ³Έμ μΈ μμλ₯Ό νλ κ°μ Έμλ΄€λ€.
package casting;
public class Car {
/*
1. Car ν΄λμ€ μ μΈ
- νλ : μ°¨λμ μμ(color), μμ§ μν(engineState)
- μμ±μ : μ°¨λμ μμμ μ λ¬λ°μ μ΄κΈ°ννλ€. μμ§ μνλ νμ κΊΌμ§μΌλ‘ μ΄κΈ°ννλ€
- turnOn λ©μλ : μλμ°¨ μλμ ν΅λλ€ λ₯Ό μΆλ ₯ ν μμ§ μνλ₯Ό μΌμ§μΌλ‘ λ³κ²½νλ€
- turnOff λ©μλ : μλμ°¨ μλμ λλλ€ λ₯Ό μΆλ ₯ ν μμ§ μνλ₯Ό κΊΌμ§μΌλ‘ λ³κ²½νλ€
- checkInfo λ©μλ : νμ¬ μ μ₯λμ΄ μλ μ°¨λμ μμκ³Ό μ°¨λμ μμ§μν νλλ₯Ό μΆλ ₯νλ€
-> μΆλ ₯ μμ :
color = red
engineState = true
*/
// νλ(field)
String color;
boolean engineState;
// μμ±μ(constructor)
Car(String color){
this.color = color;
}
// λ©μλ(method)
void turnOn() {
System.out.println("μλμ°¨ μλμ ν΅λλ€");
engineState = true;
}
void turnOff() {
System.out.println("μλμ°¨ μλμ λλλ€");
engineState = false;
}
void checkInfo() {
System.out.println("color = " + color);
System.out.println("engineState = " + engineState);
}
}
μ°μ μ΄ μ½λλ λΆλͺ¨ ν΄λμ€λΌκ³ ν μ μλ Car ν΄λμ€μ΄λ€. λ©μλκ° 3κ° μ μλμ΄μκ³ νλμ 2κ° μμ±μλ 컬λ¬λ₯Ό λ°κ³ μλ κ²μ μ μ μλ€.
package casting;
public class DieselCar extends Car{
/*
* DieselCar(){
* super();
* }
*
*
2. Car ν΄λμ€λ₯Ό μμλ°λ DieselCar ν΄λμ€ μ μΈ
- νλ : μ΅λ μ£Όμ λ(maxOil), νμ¬ μ£Όμ λ(currentOil)
- μμ±μ : μ°¨λμ μμ, μ΅λ μ£Όμ λμ μ λ¬λ°μ μ΄κΈ°ννλ€.
λ¨, μμλ°μ νλλ λΆλͺ¨ μμ±μλ₯Ό ν΅ν΄ μ΄κΈ°ννλ€
λ¨, νμ¬ μ£Όμ λμ νμ 0μΌλ‘ μ΄κΈ°ννλ€
- fillUp λ©μλ : μ λ¬ν μ£Όμ λ λ§νΌ μ£Όμ ν(νμ¬ μ£Όμ λ λ³κ²½) μ£Όμ μλ£ μΆλ ₯
λ¨, μλμ κ²½μ°λ μ μ μ£Όμ λ₯Ό μ§ννμ§ μλλ€
-> μλμ΄ μΌμ Έμλ κ²½μ° : μλμ΄ μΌμ§ μνμ
λλ€ μΆλ ₯
-> μ λ¬ν μ£Όμ λμ΄ μμμΌ κ²½μ° : μλͺ»λ μ£Όμ λ μ
λλ€ μΆλ ₯
-> μ λ¬ν μ£Όμ λμ΄ μ΅λ μ£Όμ λμ λ²μ΄λ κ²½μ° : μ΅λ μ£Όμ κ°λ₯λμ μΌλ§ μ
λλ€ μΆλ ₯ν, μ΅λ μ£Όμ λ λ§νΌλ§ μ£Όμ
-> μ λ¬ν μ£Όμ λκ³Ό νμ¬ μ£Όμ λμ ν©μ΄ μ΅λ μ£Όμ λμ λ²μ΄λ κ²½μ° : μ΅λ μ£Όμ κ°λ₯λμ μΌλ§ μ
λλ€, μ΅λ μ£Όμ λ λ§νΌλ§ μ£Όμ
- checkInfo λ©μλ : μμλ°μ checkInfo λ©μλλ₯Ό μ¬μ©νμ¬ μ¬μ μνλ€(μ€λ²λΌμ΄λ©)
μμλ°μ νλ μΈμ μ§μ μ μΈν νμ¬ μ£Όμ λκ³Ό μ΅λ μ£Όμ λλ μΆλ ₯νλ€
-> μΆλ ₯ μμ :
color = red
engineState = true
currentOil = 30
maxOil = 50
*/
// νλ(field)
int maxOil;
int currentOil;
// μμ±μ(constructor)
DieselCar(String color, int maxOil){
// λΆλͺ¨μκ² μμλ°μ νλλ λΆλͺ¨ μμ±μμκ² μ λ¬
super(color);
// μμμμ μ μΈν νλλ μμμμ μ΄κΈ°ν
this.maxOil = maxOil;
}
// λ©μλ(method)
/*
* - fillUp λ©μλ : μ λ¬ν μ£Όμ λ λ§νΌ μ£Όμ ν(νμ¬ μ£Όμ λ λ³κ²½) μ£Όμ μλ£ μΆλ ₯
λ¨, μλμ κ²½μ°λ μ μ μ£Όμ λ₯Ό μ§ννμ§ μλλ€
-> μλμ΄ μΌμ Έμλ κ²½μ° : μλμ΄ μΌμ§ μνμ
λλ€ μΆλ ₯
-> μ λ¬ν μ£Όμ λμ΄ μμμΌ κ²½μ° : μλͺ»λ μ£Όμ λ μ
λλ€ μΆλ ₯
-> μ λ¬ν μ£Όμ λμ΄ μ΅λ μ£Όμ λμ λ²μ΄λ κ²½μ° : μ΅λ μ£Όμ κ°λ₯λμ μΌλ§ μ
λλ€ μΆλ ₯ν, μ΅λ μ£Όμ λ λ§νΌλ§ μ£Όμ
-> μ λ¬ν μ£Όμ λκ³Ό νμ¬ μ£Όμ λμ ν©μ΄ μ΅λ μ£Όμ λμ λ²μ΄λ κ²½μ° : μ΅λ μ£Όμ κ°λ₯λμ μΌλ§ μ
λλ€, μ΅λ μ£Όμ λ λ§νΌλ§ μ£Όμ
*/
void fillUp(int oilNum) {
// μμ§μ΄ μΌμ ΈμμΌλ©΄ μ£Όμ λ₯Ό νμ§ λͺ»νλ€
// engineStateκ° trueλΌλ©΄ μ£Όμ νμ§ λͺ»νλ€
if(engineState) {
System.out.println("μλμ΄ μΌμ§ μνμ
λλ€");
// μμ§μ΄ μΌμ Έμλ€λ©΄ λ©μλμ μ€νμ μ’
λ£νλ€!
return;
}
// ν¬λ§νλ μ£Όμ λμ΄ μμμΌ κ²½μ°
if(oilNum < 0) {
System.out.println("μλͺ»λ μ£Όμ λ μ
λλ€");
}else if(currentOil + oilNum >= maxOil) {
// ν¬λ§νλ μ£Όμ λμ΄ μ΅λ μ£Όμ λμ λμκ²½μ°
// ν¬λ§νλ μ£Όμ λκ³Ό νμ¬ μ£Όμ λμ ν©κ³κ° μ΅λ μ£Όμ λμ λμκ²½μ°
System.out.println("μ΅λ μ£Όμ κ°λ₯λμ" + maxOil + " μ
λλ€");
currentOil = maxOil;
}else {
// ν¬λ§νλ μ£Όμ λ, νμ¬ μ£Όμ λ, μ΅λ μ£Όμ λ, μμ§ μνκ° μ μμΌ κ²½μ°
currentOil += oilNum;
System.out.println("μ£Όμ μλ£!");
}
}
// μμλ°μ checkInfo λ©μλλ₯Ό μ¬μ μνλ€ => λ©μλ μ€λ²λΌμ΄λ©
@Override
void checkInfo() {
// System.out.println("color = " + color);
// System.out.println("engineState = " + engineState);
super.checkInfo();
System.out.println("maxOil = " + maxOil);
System.out.println("currentOil = " + currentOil);
}
}
μ΄ ν΄λμ€λ μμ ν΄λμ€λ‘ Car ν΄λμ€λ₯Ό μμλ°λ Diesel Car ν΄λμ€μ΄λ€.
package casting;
public class CastingTest {
public static void main(String[] args) {
DieselCar diesel1 = new DieselCar("red", 10);
// up casting μ¬μ©
// μμνμ
λͺ
λ³μλͺ
= νμ νμ
κ°μ²΄λͺ
;
// λΆλͺ¨νμ
λͺ
λ³μλͺ
= μμ κ°μ²΄λͺ
;
// λμ
μ°μ°μλ νμ μΌμͺ½ μ μ₯곡κ°κ³Ό μ€λ₯Έμͺ½ κ°μ μλ£νμ 체ν¬νλ€
// λ€λ₯Ό κ²½μ° μλ νλ³ν ν μ μμΌλ©΄ μλ νλ³νμ΄ μ§νλλ€
Car castingObj = diesel1;
Car castingObj2 = (Car)diesel1;
// μ
μΊμ€ν
λ μμ κ°μ²΄λ μμμμ μ μΈν λ©μλμ νλλ₯Ό μ¬μ©νμ§ λͺ»νλ€
// castingObj.fillUp(20);
// System.out.println(castingObj.maxOil);
// System.out.println(castingObj.currentOil);
// λ¨, μ¬μ μλ λ©μλλ μ
μΊμ€ν
λ μνμμ μ¬μ© κ°λ₯
castingObj.checkInfo();
// down casting μ¬μ©
// μμμμ μ μΈν νλμ λ©μλλ₯Ό μ¬μ©νκΈ° μν΄ λ€μ μμνμ
(νμ)μΌλ‘ νλ³ννλ€
DieselCar dCastingObj = (DieselCar)castingObj;
dCastingObj.turnOn();
dCastingObj.fillUp(5);
dCastingObj.checkInfo();
// down castingν κ°μ²΄λ₯Ό λ³μμ μ μ₯νμ§ μκ³ λ°λ‘ νλ λλ λ©μλλ₯Ό μ¬μ©νλ€
((DieselCar)castingObj).fillUp(3);
System.out.println(((DieselCar)castingObj).maxOil);
}
}
λ©μΈ λ©μλκ° μ μΈλμ΄μλ μ½λμ΄λ€.
-->
μ°μ DieselCar ν΄λμ€λ Car ν΄λμ€λ₯Ό μμλ°κ³ μλ€. checkInfo() λ©μλλ μ€λ²λΌμ΄λ©μ΄ λμ΄μλ μνμ΄λ―λ‘
μΊμ€ν μ΄ λ μνμΌμ§λΌλ λ°λ‘ μ¬μ©μ΄ κ°λ₯νλ€λ μ μ μνμ.
μ¬μ€ μμ μμλ λμ €μΉ΄μ μμ±λ§ λ°μ Έλ³Ό κ²μ΄λΌλ©΄ μ μΊμ€ν κ³Ό λ€μ΄μΊμ€ν μ κ΅³μ΄ νμ§ μμλ λλ건 μ¬μ€μ΄λ€.
μ΄μ°¨νΌ DielelCar ν΄λμ€κ° Carν΄λμ€μ λͺ¨λ κ²μ μμ λ°κ³ μκ³ νμν λ©μλλ μ€λ²λΌμ΄λ©μΌλ‘ μ¬μ μκΉμ§ νμΌλλ§μ΄λ€. νμ§λ§ κ·ΈλΌμλ ν΄λ³Έ κ²μ, μΊμ€ν μ λλμ μμ보기 μν΄μλ€.
μ΄λ μΊμ€ν μ κ°μ₯ κΈ°λ³Έμ΄λΌκ³ ν μ μλ€.
*** μ€λ casting ν΅μ¬ ***
1. κ°μ²΄λ μ¬λ¬κ°μ μλ£ν(νμ
)μ κ°μ§λ€
2. μμν΄λμ€λ μμλ°μ λΆλͺ¨ ν΄λμ€μ μλ£ν(νμ
)μ κ°μ§λ€
3. κ°μ²΄λ κ°μ§κ³ μλ μλ£ν(νμ
)μΌλ‘ νλ³ν κ°λ₯νλ€
4. λΆλͺ¨ν΄λμ€λ μμν΄λμ€μ μλ£ν(νμ
)μ κ°μ§μ§ μλλ€!
'μΈμ΄ > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JAVA : μΆμ ν΄λμ€μ μΆμ λ©μλ (0) | 2024.08.29 |
---|---|
JAVA : νλ³ν λ° μΊμ€ν μ°μ΅ (2) | 2024.08.28 |
JAVA : Final(μμ) μ¬μ©νκΈ° (0) | 2024.08.21 |
JAVA : μ κ·Ό μ νμμ static (0) | 2024.08.18 |
JAVA : TV νλ‘κ·Έλ¨ λ§λ€κΈ° (1) | 2024.08.18 |