1. νλ³ν(μΊμ€ν ) κ°λ π¦
νλ³ν(μΊμ€ν )μ΄λ λ³μ λλ μμμ νμ μ λ€λ₯Έ νμ μΌλ‘ λ³ννλ κ²μ λ§νλ€.
κΈ°λ³Έν(Primitive Type)μμλ booleanμ μ μΈν λλ¨Έμ§ νμ λ€μ μλ‘ νλ³νμ΄ κ°λ₯νλ€.
μ°Έμ‘°ν(Reference Type)μμλ μλ‘ μμκ΄κ³κ° μλ ν΄λμ€ μ¬μ΄μμλ§ νλ³νμ΄ κ°λ₯νλ€. μμνμ μ μ°Έμ‘°λ³μλ₯Ό μ‘°μνμ μ μ°Έμ‘°λ³μλ‘, μ‘°μνμ μ μ°Έμ‘°λ³μλ₯Ό μμνμ μ μ°Έμ‘°λ³μλ‘ νλ³νμ νλ κ²μ΄λ€.
μ΄ κΈμμλ κΈ°λ³Ένμ νλ³ν보λ€λ μ°Έμ‘°νμ νλ³νμ μ΄μ μ λ§μΆλλ‘ νλ€.
μ°Έμ‘°ν μΊμ€ν μ 2κ°μ§λ‘ λλ μ μλ€.
1. μ μΊμ€ν (Up-Casting)
- μμνμ μ μ°Έμ‘°λ³μλ₯Ό μ‘°μνμ μ μ°Έμ‘°λ³μλ‘ λ³ννλ κ²
- μ μΊμ€ν μ νλ©΄ μμλ°μ μλΈ ν΄λμ€μ μκ΄μμ΄ νλμ μΈμ€ν΄μ€λ‘ λ¬Άμ΄μ κ΄λ¦¬ν μ μλ€. (Lion, Tiger, Bearλ₯Ό λͺ¨λ Animalλ‘ λ¬Άμ μ μλ€.)
class Animal { }
class Lion extends Animal { }
class Tiger extends Animal { }
class Bear extends Animal { }
public static void main(String[] args) {
Animal animal1 = new Lion();
Animal animal2 = new Tiger();
Animal animal3 = new Bear();
List<Animal> animals = new ArrayList<>();
animals.add(animal1);
animals.add(animal2);
animals.add(animal3);
}
2. λ€μ΄μΊμ€ν (Down-Casting)
- μ‘°μνμ μ μ°Έμ‘°λ³μλ₯Ό μμνμ μ μ°Έμ‘°λ³μλ‘ λ³ννλ κ²
- λ€μ΄μΊμ€ν μ ν΅ν΄ μ μΊμ€ν λ μμ ν΄λμ€λ₯Ό 볡ꡬνμ¬ λ³ΈμΈμ νλμ κΈ°λ₯μ λͺ¨λ μ¬μ©ν μ μλ€. (μ μΊμ€ν μ΄ λλ©΄ μμ ν΄λμ€μ κ³ μ νλμ λ©μλλ₯Ό μ¬μ©ν μ μκ² λλ€. ν΄λΉ λ΄μ©μ λ€μμ μμΈν μμ보μ.)
2. νλ³ν λ°©λ² λ° μ£Όμμ π
νλ³ν(μΊμ€ν )μ λ°©λ²μ κ°λ¨νλ€. νλ³ννκ³ μ νλ λ³μ μμ λ³ννκ³ μ νλ νμ μ κ΄νΈμ ν¨κ» λΆμ¬μ£ΌκΈ°λ§ νλ©΄ λλ€.
public static void main(String[] args) {
Tiger tiger = new Tiger();
Animal animal = (Animal) tiger;
Tiger newTiger = (Tiger) animal;
}
νλ³νμ μ°Έμ‘°λ³μμ νμ μ λ³ννλ κ²μ΄μ§ μΈμ€ν΄μ€λ₯Ό λ³ννλ κ²μ μλκΈ° λλ¬Έμ μ°Έμ‘°λ³μμ νλ³νμ μΈμ€ν΄μ€μ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μλλ€. λ¨μ§ μ°Έμ‘°λ³μμ νλ³νμ ν΅ν΄μ, μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μμ μ¬μ©ν μ μλ λ©€λ²μ λ²μ(κ°μ)λ₯Ό μ‘°μ νλ κ²λΏμ΄λ€.
μ μΊμ€ν κ³Ό λ€μ΄μΊμ€ν μ λν΄μ μμΈν μμ보μ.
π 1. μ μΊμ€ν (Up-Casting)
μ μΊμ€ν (μμνμ μ μ°Έμ‘°λ³μλ₯Ό μ‘°μνμ μ μ°Έμ‘°λ³μμ ν λΉνλ κ²½μ°)μ νλ κ²½μ°μλ νλ³νμ μλ΅ν μ μλ€.
public static void main(String[] args) {
Tiger tiger = new Tiger();
// κΈ°μ‘΄
Animal animal = (Animal) tiger;
// ν λ³ν μλ΅
Animal animal = tiger;
}
νλ³νμ μλ΅ν μ μλ μ΄μ λ μ°Έμ‘°λ³μκ° λ€λ£° μ μλ λ©€λ²μ κ°μκ° μ€μ μΈμ€ν΄μ€κ° κ°κ³ μλ λ©€λ²μ κ°μλ³΄λ€ μ μ κ²μ΄ λΆλͺ νλ―λ‘ λ¬Έμ κ° λμ§ μκΈ° λλ¬Έμ΄λ€. μ μΊμ€ν μμλ λ€μ 2κ°μ§λ₯Ό μ£Όμν΄μΌ νλ€.
1. μ μΊμ€ν μ νλ©΄ λ©€λ² κ°μκ° μ νλμ΄ μμ ν΄λμ€μμλ§ μλ λ©€λ²λ μ¬μ©ν μ μκ² λλ€.
μ μΊμ€ν μ νκ² λλ©΄ λΆλͺ¨ ν΄λμ€ λ©€λ²λ‘ λ©€λ² κ°μκ° νμ λκΈ° λλ¬Έμ μμ ν΄λμ€ λ΄μ μλ λͺ¨λ λ©€λ²μ μ κ·Όν μ μκ² λλ€.
public static void main(String[] args) {
SportsCar sportsCar = new SportsCar();
sportsCar.fastDrive();
sportsCar.sportsMode = true;
Car car = sportsCar;
car.fastDrive(); // μ¬μ©λΆκ°
car.sportsMode = true; // μ¬μ©λΆκ°
}
class Car {
String color;
int door;
void drive() {
System.out.println("drive~~~");
}
void stop() {
System.out.println("stop!!!");
}
}
class SportsCar extends Car {
boolean sportsMode = false;
@Override
void drive() {
System.out.println("sports car drive~~~");
}
void fastDrive() {
System.out.println("fast drive~~!");
}
}
class Ambulance extends Car {
void siren() {
System.out.println("siren~~~");
}
}
2. μ μΊμ€ν νμ§λ§ μ€λ²λΌμ΄λ© λ λ©μλλ μμ ν΄λμ€μ λ©μλλ‘ μ€νμ΄ λλ€.
public static void main(String[] args) {
SportsCar sportsCar = new SportsCar();
Car car = sportsCar;
car.drive(); // sprots car drive~~~
}
π 2. λ€μ΄μΊμ€ν (Down-Casting)
λ€μ΄μΊμ€ν (μ‘°μνμ μ μ°Έμ‘°λ³μλ₯Ό μμνμ μ μ°Έμ‘°λ³μλ‘ ν λΉνλ κ²½μ°)μ νλ κ²½μ°μλ νλ³νμ μλ΅ν μ μλ€.
public static void main(String[] args) {
Ambulance ambulance = new Ambulance();
Car car = ambulance;
// νλ³νμ λΆμ¬μΌ ν¨
Ambulance newAmbulance = (Ambulance) car;
// λ€μκ³Ό κ°μ΄ νλ³ν μλ΅ λΆκ°
Ambulance newAmbulance = car;
}
λ€μ΄μΊμ€ν μ νλ κ²½μ°μλ μ°Έμ‘°λ³μκ° λ€λ£° μ μλ λ©€λ²μ κ°μλ₯Ό λ리λ κ²μ΄λ―λ‘ λ¬Έμ κ° λ°μν κ°λ₯μ±μ΄ μλ€. κ·Έλ κΈ° λλ¬Έμ νλ³νμ μλ΅ν μ μλ€.
λ€μ΄μΊμ€ν μμμ μ£Όμμ μ 'λ¨μν μ μΊμ€ν μ λ°λ κ°λ μ΄ μλλ€'λΌλ κ²μ΄λ€. λ€μ΄ μΊμ€ν μ λΆλͺ¨ ν΄λμ€λ‘ μ μΊμ€ν λ μμ ν΄λμ€λ₯Ό 볡ꡬνμ¬ λ³ΈμΈμ νλμ κΈ°λ₯μ ν볡νκΈ° μν΄ μλ κ²μ΄λ€.
public static void main(String[] args) {
// μλͺ»λ κ²½μ°
Car car = new Car();
Ambulance ambulance = (Ambulance) car; // ClassCastException
// μλ§μ κ²½μ°
Ambulance ambulance = new Ambulance();
Car car = ambulance;
Ambulance newAmbulance = (Ambulance) car;
}
μ¦, μ‘°μνμ μ μΈμ€ν΄μ€λ₯Ό μμνμ μ μ°Έμ‘°λ³μλ‘ μ°Έμ‘°νλ κ²μ νμ©λμ§ μλλ€.
κ·Έλμ instanceof μ°μ°μλ₯Ό μ¬μ©νλ€λ©΄ μ°Έμ‘°λ³μκ° μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μ μ€μ νμ μ νμΈν μ μλ€.
public static void main(String[] args) {
SportsCar sportsCar = new SportsCar();
Ambulance ambulance = new Ambulance();
Car car1 = sportsCar;
Car car2 = ambulance;
doWork(car1); // fast drive~~!
doWork(car2); // siren~~~
}
public static void doWork(Car car) {
if(car instanceof SportsCar){
SportsCar sportsCar = (SportsCar) car;
sportsCar.fastDrive();
}
else if( car instanceof Ambulance) {
Ambulance ambulance = (Ambulance) car;
ambulance.siren();
}
}
3. μ°Έμ‘°λ³μ νλ³νμ μ£Όμ μ€ν κ³Όμ π¦¨
λ§μ§λ§μΌλ‘ μ μΊμ€ν κ³Ό λ€μ΄μΊμ€ν μ μ€νκ³Όμ μ κ·Έλ¦Όκ³Ό ν¨κ» μ΄ν΄λ³΄λλ‘ νμ. (μμ£Ό κ°λ¨ν λ΄μ©μ΄λΌμ μ€λͺ μ μλ΅νλ€.)
μ£Όμμ ν΄λΉνλ μν©(μν© 1, μν© 2, μν© 3)κ³Ό κ·Έλ¦Όμ 맀μΉμμΌμ 보λλ‘ νμ.
class Car {
String color;
int door;
void drive() {
System.out.println("drive~~~");
}
void stop() {
System.out.println("stop!!!");
}
}
class Ambulance extends Car {
void siren() {
System.out.println("siren~~~");
}
}
public static void main(String[] args) {
// μν© 1
Ambulance ambulance1 = new Ambulance();
Car car = null;
Ambulance ambulance2 = null;
// μν© 2
car = ambulance1;
// μν© 3
ambulance2 = (Ambulance) car;
}
μν© 1
μν© 2
μν© 3
ν΄λΉ κΈμ
λ¨κΆμ± λμ 'μλ°μ μ μ',
Inpa λμ 'JAVA μ μΊμ€ν & λ€μ΄μΊμ€ν - μλ²½ μ΄ν΄νκΈ°'
λ₯Ό μ°Έκ³ νμμ΅λλ€.
'π JAVA > μ£Όμ κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μΆμ ν΄λμ€(Abstract Class) (2) | 2023.06.11 |
---|---|
μ λ€λ¦(Generics) - 곡λ³(Covariant), λΆκ³΅λ³(Invariant), λ°κ³΅λ³(Contravariant) (0) | 2023.05.29 |
μ λ€λ¦(Generics) - κΈ°λ³Έ κ°λ (0) | 2023.05.13 |
λνΌ ν΄λμ€ (Wrapper Class) (0) | 2023.05.09 |
clone() (0) | 2023.04.07 |