: νμ λ³νμ νμ μ λ€λ₯Έ νμ μΌλ‘ λ³ννλ νμλ₯Ό λ§ν¨
1. μλ νμ λ³ν (Promotion)
: νλ‘κ·Έλ¨ μ€νλμ€ μλμ μΌλ‘ νμ μ΄ λ³νλλ κ²
μ¦, μμ λ³μκ° λΆλͺ¨ λ³μλ‘ μλ νμ λ³ν λλ κ²(child κ° parent μ typeμΌλ‘ λ³ν)
λΆλͺ¨ νμ
λ³μ = μμ νμ
; // μλ νμ
λ³ν
Parent parent = new Child(); // parent classκ° child typeμΌλ‘ μμ±
//-------------------------------λ€μκ³Ό κ°μ΄λ κ°λ₯------------------------------------
Child child = new Child();
Parent parent = child;
// child μ parent λͺ¨λ λμΌν child κ°μ²΄ μ°Έμ‘°
μμ λ μμ ν΄λμ€μ λ°λ‘ μμ λΆλͺ¨κ° μλλλΌλ μμ νμ μ΄λ©΄ μλ νμ λ³νμ΄ μΌμ΄λ μ μλ€.
μλ νμ λ³νμ΄ λ μ΄ ν, λΆλͺ¨ ν΄λμ€μ μ μΈλ νλμ λ©μλλ§ μ κ·Όμ΄ κ°λ₯νλ€.
λ³μλ μμ κ°μ²΄λ₯Ό μ°Έμ‘°νμ§λ§, λ³μλ‘ μ κ·Όμ΄ κ°λ₯ν λ©€λ²λ λΆλͺ¨ ν΄λμ€λ‘ νμ
-> μμ ν΄λμ€μμ method μ¬μ μμ μμ ν΄λμ€μ λ©μλκ° λμ νΈμΆ
// Parent.java
public class Parent{
int a;
public void method(int b){
b++;
}
}
// Child.java
public class Child extends Parent{
int b;
@Override
public void method(int b){
b+=2;
}
public void method2(int c){
c+=5;
}
}
//main java class
public static void main(String[] args){
Parent parent = new Child();
parent.a = 1;
parent.method(2); // child μ override λ κ²μΌλ‘ bμ κ°μ 4
/*
Parentμ μλ method, field λ§ νΈμΆ κ°λ₯
parent.b = 1;
parent.method2(3);
*/
}
2. νλμ λ€νμ±
: νλμ νμ μ λΆλͺ¨μ νμ μΌλ‘ μ μΈνλ©΄ λ€μν μμ κ°μ²΄λ€μ΄ μ μ₯λ μ μκΈ°μ μ¬μ© κ²°κ³Όκ° λ¬λΌμ§ μ μλ€.
public class Pet{
public String petName;
public int age = 0;
public Pet(String petName){
this.petName = petName;
}
public void plusAge(int age){
this.age = age + 1;
System.out.println(this.age);
}
}
//-------------------------------------------------------------------------------------
public class Cat extends Pet{
public Cat(String petName){
super(petName);
}
@Override
public void plusAge(int age){
this.age = age + 9;
System.out.println(this.age);
}
}
//-------------------------------------------------------------------------------------
public class Dog extends Pet{
public Dog(String petName){
super(petName);
}
@Override
public void plusAge(int age){
this.age = age + 4;
}
}
//-------------------------------------------------------------------------------------
public class Person {
public Person() {}
Pet pet1 = new Pet("μ½μ½");
Pet pet2 = new Pet("κ°μ");
}
//-------------------------------------------------------------------------------------
public static void main(String[] args){
Person person = new Person(); // person κ°μ²΄ μμ±
boolean a = true;
if(a) {
person.pet1 = new Cat("μ½μ½"); // person κ°μ²΄ λ΄ Pet κ°μ²΄, Catμ Pet κ°μ²΄ TypeμΌλ‘
person.pet1.plusAge(4); // Override method
}else {
person.pet2 = new Dog("κ°μ"); // person κ°μ²΄ λ΄ Pet κ°μ²΄, Dogμ Pet κ°μ²΄ TypeμΌλ‘
person.pet2.plusAge(5); // Override method
}
}
3. 맀κ°λ³μμ λ€νμ±
: μλ νμ λ³νμ λ©μλ νΈμΆν λμλ λ§μ΄ λ°μνλ€. λ§€κ° λ³μμ νμ κ³Ό λμΌνκ² κ°μ μ§μ νκΈ°λ νμ§λ§, μμ κ°μ²΄λ‘λ μ§μ μ΄ κ°λ₯
public class Example{
public void method(Pet pet){
pet.plusAge(3);}
}
μ method λ₯Ό νΈμΆν λμλ λ€μκ³Ό κ°λ€.
Example example = new Example();
Pet pet = new Pet("μ½μ½");
example.method(pet);
μ΄λ μμμ ν΄λμ€μΈ Cat, Dog κ°μ²΄λ₯Ό λ겨주λκ²λ κ°λ₯νλ€.
Example example = new Example();
Cat cat = new Cat("μ½μ½");
Dog dog = new Dog("λκ·Έ");
example.method(cat); // Pet pet = cat;
example.method(dog); // Pet pet = dog;
μ¦, λ§€κ° λ³μμ νμ μ΄ ν΄λμ€ μΌ κ²½μ°, ν΄λμ€μ κ°μ²΄ λΏλ§ μλλΌ μμ κ°μ²΄κΉμ§λ λ§€κ° κ°μΌλ‘ μ¬μ©μ΄ κ°λ₯νλ€.
4. κ°μ νμ λ³ν (Casting)
: λΆλͺ¨ νμ μ μμ νμ μΌλ‘ λ³ννλ κ²μ μλ―Ένλ€.
μ¦, μλ νμ λ³νλμ΄ λΆλͺ¨ νμ μΌλ‘ λ³ν λ μμμ λ€μ μμ νμ μΌλ‘ κ°μ λ‘ λ³ννλ κ²μ΄λ€.
Pet pet = new Cat("μΊμΈ "); // μλ νμ
λ³ν
Cat cat = (Cat) pet; // κ°μ νμ
λ³ν
/*
μμ νμ
λ³μ = (μμ νμ
) λΆλͺ¨ νμ
;
*/
κ°μ νμ λ³νμ νκ² λλ©΄, λΆλͺ¨ κ°μ²΄μλ μκ³ μμ κ°μ²΄μλ μλ fieldμ method λ₯Ό μ¬μ©ν μ μκ² λλ€.
5. κ°μ²΄ νμ νμΈ (instanceof μ°μ°μ)
: μμ νμ μ΄ λΆλͺ¨ νμ μΌλ‘ λ³νλμ΄ μλ μνμΈμ§, λΆλͺ¨ νμ μΌλ‘ μμ±λ κ°μ²΄μΈμ§ νμΈν μ μλ λ°©λ²μ λκ° μμκΉ?
// μμ νμ
μ΄ λΆλͺ¨ νμ
μΌλ‘ λ³ν
Pet pet = new Cat("μ½μ½");
// λΆλͺ¨ νμ
μΌλ‘ μμ± λ κ°μ²΄
Pet pet = new Pet("μ½μ½");
Cat cat = (Cat) pet;
μ΄λ₯Ό νμΈν μ μλ λ°©λ²μ instanceofμ΄λ€.
// instanceofλ₯Ό μ¬μ©
// true : μ°νμ νμ
μΌλ‘ κ°μ²΄ μμ±
// false : μμ± μλ¨
boolean result = μ’ν(κ°μ²΄) instanceof μ°ν(νμ
)
public void method(Pet pet){
if(pet instanceof Cat){
System.out.println("μλ νμ
λ³ν");
Cat cat = (Cat) pet;
// κ°μ νμ
λ³ν
} else{
System.out.println("μλ νμ
λ³ν μλ");}
}
instanceof μ°μ°μλ‘ κ°μ²΄ νμ μ νμΈνμ§ μκ³ κ·Έλ₯ κ°μ νμ λ³νμ νκ² λλ©΄ μλ νμ λ³νμ΄ μλ κ²½μ° μλ¬κ° λ°μνκ² λλ€.
μ¦, μλ¬κ° λ°μνλ κ²½μ°λ
Pet pet = new Pet("μ½μ½");
Cat cat = (Cat) pet;
μΈ κ²½μ°μ΄λ€.
Casting κ³Ό Promotion λͺ¨λ 볡μ‘νλ€...λ€νμ± ,,, μμΌλ‘ λμ±λ κ³΅λΆ μ΄μ¬ν ν΄μΌμ§,, ΰ²₯_ΰ²₯
[μΆμ²] p. 332 ~ p. 353