π» μμ?
ν΄λμ€μλ μμμ΄λΌλ κΈ°λ₯μ΄ μ‘΄μ¬νλ€.
μ΄μ μ μ‘΄μ¬νλ ν΄λμ€λ₯Ό ν λλ‘ μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€μ΄ λ΄λκ²μ΄λ€.
μ΄λ public,protectedλ μμ ν΄λμ€μμ μ κ·Όμ΄ κ°λ₯νλ©°
defaultμ κ²½μ°μλ κ°μ ν¨ν€μ§ λ΄μμλ§ μμ ν΄λμ€κ° μ κ·Όκ°λ₯νλ€.
π μ¬μ©λ²
class μμ ν΄λμ€ μ΄λ¦ extends λΆλͺ¨ ν΄λμ€μ΄λ¦{
}
μΌλ‘ μμν μ μλ€.
π νΉμ§
μ°λ¦¬κ° λΆλͺ¨λμΌλ‘ λΆν° μ μ μ μΌλ‘ λ¬Όλ €λ°λ―μ΄ ν΄λμ€ μμ λν λκ°λ€.
λ΄λΆ 맀μλ,λ³μλ€μ λ¬Όλ €λ°μΌλ©° μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ μμλ€ + μμ λ§μ 무μΈκ°λ₯Ό μΆκ°ν μ μλ€.
μλ₯Ό λ€μ΄ μλμ°¨λΌλ λΆλͺ¨ ν΄λμ€κ° μ‘΄μ¬νλ€.
μμ ν΄λμ€λ νλΌλ¦¬λΌκ³ ν΄λ³΄μ.
κ·Έλ λ€λ©΄ νλΌλ¦¬λ λΆλͺ¨ ν΄λμ€μΈ μλμ°¨μ μμλ€ + νλΌλ¦¬λ§μ νΉμ§μ μΆκ° ν μ μλκ²μ΄λ€.
λν μμν΄λμ€μ μμλ κ°λ₯νλ€.
μ΄λ¬λ©΄ νλΌλ¦¬ μ¬μ λ€λ₯Έ λͺ¨λΈλ€μ νλΌλ¦¬λΌλ ν΄λμ€λ‘ λΆν° μμμ λ°μ λ§λ€μ μλ€.
μ΄λ΄ κ²½μ° μ₯μ μ νλΌλ¦¬μ¬μ 곡ν΅μ μΈ λ³κ²½μ΄ λ°μμμ λͺ¨λ κΈ°μ’
ν΄λμ€λ₯Ό λ°κΏ νμκ° μμ΄
νλΌλ¦¬λΌλ λΆλͺ¨ ν΄λμ€λ§ μμ μμΌ μ£Όλ©΄ λλ€.
π μμ
νλ² μ¬μ©ν΄λ³΄μ
public class Parent {
public Parent(){
System.out.println("Parent Constructor");
}
public void printName(){
System.out.println("Parent printName()");
}
}
public class Child extends Parent {
public Child(){
System.out.println("Child Constructor");
}
}
public class InhritancePrint {
public static void main(String[] args) {
Child child=new Child();
child.printName();
}
}
μ ν΄λ³΄μ κ²°κ³Όκ° μ΄λ»κ² λμ¬κΉ??
λ΄ μκ°μΌλ‘λ childμ μμ±μ μ€νν λ°λ‘ printNameμ΄ μ€νλ κ²κ°λ€.
![](https://velog.velcdn.com/images/rachi_3/post/adb72026-8cac-4c86-8973-5247cdfa4fff/image.png)
μμκ³Όλ λ€λ₯΄κ² λΆλͺ¨ ν΄λμ€μ μμ±μλΆν° μ€νμ΄ λμλ€.
κ·Έλ λ€λ©΄ μμμ μμ ν΄λμ€λ₯Ό λ§λ€κ³ μ€νν΄λ λΆλͺ¨μ μ‘°λΆλͺ¨ ν΄λμ€μ μμ±μκ° μ€νλ κΉ??
public class grandchild extends Child {
public grandchild(){
System.out.println("grandchild Constructor");
}
}
public class InhritancePrint {
public static void main(String[] args) {
grandchild gchild=new grandchild();
gchild.printName();
}
}
μ μ½λλ₯Ό μΆκ°νν λ€μ μ€νν΄λ³΄μ
![](https://velog.velcdn.com/images/rachi_3/post/57450265-a694-4a9a-ba65-851701fe152b/image.png)
μ‘°λΆλͺ¨ ν΄λμ€μ μμ±μ λ§μ μ€νμ΄ λμλ€.
λ΄λΆμ μΌλ‘ λΆλͺ¨ ν΄λμ€μ μμ±μλΆν° μ€νλν μμ ν΄λμ€μ μμ±μκ° μ€νλλ€.
π μμκ³Ό κΈ°λ³Έ μμ±μ
μμ λΆλͺ¨ν΄λμ€λ€μμ κΈ°λ³Έμμ±μλ₯Ό λ§λ€μ΄ λμΌλ©΄
μμ ν΄λμ€μκ² μμμ λ¨Όμ λΆλͺ¨μ μμ±μκ° μ€νν μμμ΄ λ§λ€μ΄μ‘λ€.
κ·Έλ λ€λ©΄ λ§μ½μ λΆλͺ¨ ν΄λμ€μμ κΈ°λ³Έ μμ±μκ° μλ€λ©΄ μ΄λ»κ² λ κΉ???
μμ μ½λμμ parentμ μμ±μλ₯Ό
public class Parent {
public Parent(String Str){
System.out.println("Parent Constructor");
}
public void printName(){
System.out.println("Parent printName()");
}
}
μ΄λ κ² λ³κ²½ν λ€μ μ€νν΄λ³΄μ.
![](https://velog.velcdn.com/images/rachi_3/post/2dfbe360-c92a-4e6b-9a54-7f811c472e8a/image.png)
κΈ°λ³Έμμ±μκ° μμ΄μ μ€λ₯κ° λ°μνλ€κ³ μλ €μ€λ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μλ
1. κΈ°λ³Έμμ±μ λ§λ€μ΄μ£ΌκΈ°
2. super() μ¬μ©
μ΄μ€ super μ¬μ©μ μμ보μ.
π super
superλ ν΄λμ€μμ thisμ λΉμ·ν μν μνλ€.
μ΄λ thisλ μμ μ κ°μ²΄λ₯Ό λνλΈλ€λ©΄
superμ λΆλͺ¨ ν΄λμ€λ₯Ό λνλΈλ€.
μ μ²λΌ μμ±μκ° λ§€κ°λ³μλ₯Ό λ°λ κ² λ°μ μλ€λ©΄
μ°λ¦¬λ super("맀κ°λ³μ μ λ¬");μ μμ ν΄λμ€μ μ¨μ€μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°κ°λ₯νλ€.
μ΄λ superλ λ°λμ μμ ν΄λμ€μ μμ±μμ μ μΌ μ²«λ²μ§Έ μ€μ μ¬μ©ν΄μΌνλ€.
public class Child extends Parent {
public Child(){
super("hi");
System.out.println("Child Constructor");
}
}
μ΄λ°μμΌλ‘ μ¬μ©μ΄ κ°λ₯νλ©°
μ΄λ μμ ν΄λμ€μ μμ±μμκ² super("hi")λ₯Ό μ¬μ©νλ©΄ μλλ€.
μμ ν΄λμ€μμ μ¬μ©μ ν΄μΌ λ¬Έμ κ° μκΈ°μ§ μλλ€.
λΆλͺ¨->μμ->μμ μμΌλ‘ λ΄λ €μ€κΈ° λλ¬Έμ λ°λ‘ μμ ν΄λμ€λ₯Ό κΈ°μ€μΌλ‘ μ¬μ©νλ€.
π 맀μλ overriding
μμμ λΆλͺ¨μ 맀μλλ₯Ό λͺ¨λ ν¬ν¨νλ€.(private λ±μ κ²½μ°λ₯Ό μ μΈνλ©΄)
μ΄λ λ΄κ° λΆλͺ¨λ‘ λΆν° λ°μ 맀μλλ₯Ό μ΄μ§ λ³κ²½μ΄ κ°λ₯νλ€.
μμ λ°°μ΄ overloadingμ κ°μ μ΄λ¦ λ€λ₯Έ 맀κ°λ³μμ 맀μλλ₯Ό μ¬λ¬κ° μμ±μ΄ κ°λ₯ν κΈ°λ₯μ΄μλ€.
overriding λν λΉμ·νλ€.
overridingμ κ°μ μ΄λ¦ κ°μ 맀κ°λ³μ λ€λ₯Έ λ΄μ©μ 맀μλλ₯Ό μμ ν΄λμ€κ° κ°μ§μ μλ€λ κ²μ΄λ€.
μ΄λ μ€μν κ·μΉμ΄ μλ€.
1. λΆλͺ¨μ 맀μλμ μ΄λ¦ λ¦¬ν΄ λ§€κ°λ³μκ° λμΌν΄μΌνλ€.
2. λ§μ½ μ΄λ¦μ΄ κ°μλ° λ¦¬ν΄, 맀κ°λ³μ λμ€νλκ° λ€λ₯΄λ€λ©΄ μ€λ₯κ° λ°μνλ€.
3. λΆλͺ¨μ μ κ·Ό μ μ΄μ λ³΄λ€ μ’μ λ²μλ‘ κ°μ§ λͺ»νλ€.(λΆλͺ¨ : public μμ : private μλ)
μ΄λ μμλ μ΄λ»κ² λ κΉ????
μ‘°λΆλͺ¨(parent)μ 맀μλμΈ printNameμ λ³κ²½ν μμ ν΄λμ€λ₯Ό μ€νν΄λ³΄λ©΄
μ΄λ»κ² λ κΉ?
![](https://velog.velcdn.com/images/rachi_3/post/05391969-5c90-43c2-912f-46e857e8b2d6/image.png)
μμλ λΆλͺ¨(child)λ‘ λΆν° μμλμκΈ°μ λΆλͺ¨μ 맀μλλ₯Ό κ·Έλλ‘ λ°λΌμ¨λ€.
μμμλ μ¬μ©μνμ§λ§ toString μ²λΌ μ€λ²λΌμ΄λλ₯Ό ν λλ
@overrideλ₯Ό μμ λͺ
μν΄μ£Όκ³ νλκ²μ΄ μ’λ€.
π casting
ν΄λμ€λ νλ³νμ΄ μ‘΄μ¬νλ€.
λΆλͺ¨λ₯Ό μμ ν΄λμ€λ‘ λλ μμμ λΆλͺ¨ ν΄λμ€λ‘ λ³κ²½μ΄ κ°λ₯νλ°
Parent Obj1 = new Child();
κΌ΄λ‘ μμμ΄ λΆλͺ¨λ‘ λ³νλ κ²μ up-casting
Child Obj2 = new Parent();
κΌ΄λ‘ λΆλͺ¨κ° μμμΌλ‘ νλ³νμν€λ κ²μ down-castingμ΄λΌνλ€.
νμ§λ§ μ΄λ down-castingμ μ λ°μμΌλ‘ νλ©΄ μ€λ₯κ° λ°μνλ€.
μ κ·Έλ΄κΉ?
π μ€λ₯
λΆλͺ¨-μμμΌλ‘ μκ°νμ§ λ§κ³ λ κ°λ¨νκ² λ°κΏλ³΄μ
λλ¬Ό-ν λΌμ κ΄κ³λΌ ν΄λ³΄μ
Animal animal = new Rabbit();
Rabbit rabbit = new Animal();
μμμ κ²½μ° λΆλͺ¨λ³΄λ€ λ λ§μ 맀μλμ μμ±λ±μ κ°μ§κ³ μμμ μκΈ°μ
μ€λ₯κ° λ°μνλ€.
down-castingμ κ·Έλ¬λ©΄ μ΄λ»κ² μ€νν΄μΌ νλκ°??
μ°λ¦¬λ down-castingμ λͺ
μμ μΌλ‘ νμΈμμΌ μ€μΌνλ€.
μ»΄νμΌλ¬μκ² μ΄κ±° μ€μ μλκ³ μΌλΆλ¬ λ°κΎΈλ €λκ±°μΌ λΌκ³ μλ €μ£ΌκΈ° μν΄μ
Rabbit rabbit = (Rabbit) animal;
(Rabbit)μ ν΅ν΄μ λͺ
μμ μΌλ‘ νλ³ν ν΄μ€μΌνλ€.
π κΆκΈμ¦
κ·Έλ λ€λ©΄ up-castingμ΄ κ°λ₯ν μ΄μ λ
μμν΄λμ€λ λΆλͺ¨ ν΄λμ€μ μμλ€μ κ°μ§κ³ μκΈ° λλ¬Έμ΄ μλκ°???
λ§μ½μ μ€λ²λΌμ΄λ©μΌλ‘ 맀μλλ₯Ό νλ λ°κΏ¨μλλ κ·Έκ² λλ?
λν λλ€λ©΄ μ
μΊμ€ν
ν parentμ 맀μλλ₯Ό μ€νμ κ²°κ³Όκ° μ΄μ°λλ?
public class tempt {
public static void main(String[] args) {
castingParent CTP=new castingChild();
CTP.printName();
CTP.printUpcasting();
}
}
public class castingParent{
public void printName(){
System.out.println("I'm your parent!");
}
}
public class castingChild extends castingParent{
@Override
public void printName(){
System.out.println("I'm your child");
}
public void printUpcasting(){
System.out.println("μ
μΊμ€ν
νμ§λ‘±!");
}
}
κ²°κ³Όκ° κ³Όμ° μ΄λ»κ² λμ¬κΉ???
![](https://velog.velcdn.com/images/rachi_3/post/0688afdc-2795-46a3-bdbb-10b43483433e/image.png)
λ¬Έμ μμ΄ μ€νμ΄ λμμΌλ©°
λν childμ 맀μλλ‘ μ€νλμλ€.
FAQ
κΆκΈμ¦μ΄ ν΄κ²°μ΄ μλμ μμ λ‘ λ¨κ²¨λλ€.
1. μ
μΊμ€ν
μ΄ κ·Έλ₯ κ°λ₯ν μ΄μ λ μμμ΄ λΆλͺ¨μ μμ±μ κ°μ§κ³ μκΈ° λλ¬Έ μλκ°?
κ·Έλ λ€λ©΄ μ΄μ§Έμ overrideλ₯Ό νλ©΄ μμ±μ΄ λ¬λΌμ§λ κ² κ°μλ° λ¬Έμ μμ΄ upcastingμ΄ λλκ°
2. upcasting μμλ μμ ν΄λμ€κ° λΆλͺ¨λ‘ νμ΄ λ°λλ€.
κ·Έλ°λ° μ΄μ§Έμ λ΄λΆ 맀μλλ₯Ό μ€νν΄λ³΄λ©΄ μμ 맀μλλ‘ μ€νμ΄ λλκ°?(overrideν 맀μλ)
3. μ€λ²λΌμ΄λν μμμ 맀μλκ° μ€νλμλλ° κ·Έλ₯ μμμ 맀μλλ μ€νμ΄ λμ§ μκ³ μ€λ₯κ° λ°μνλ€.
μ μ΄λ° μ°¨μ΄κ° λ°μνλ κ²μΈκ°???