[JAVA] 상속(Inheritance)μ΄λž€?


Contents


상속 Inheritance μ΄λž€?

이전에 λ§Œλ“€μ–΄ 놓은 섀계도에 κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” 것을 λ§ν•œλ‹€. μ½”λ“œμ˜ μž¬μ‚¬μš©μ„± 및 신뒰성이 μ¦κ°€ν•˜λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

extends ν‚€μ›Œλ“œλ₯Ό 톡해 클래슀 상속을 λ°›λŠ”λ‹€.

javaμ—μ„œλŠ” 닀쀑 상속을 μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€. (닀쀑 상속 = μ—¬λŸ¬ 클래슀λ₯Ό μƒμ†λ°›λŠ” ν–‰μœ„)

A β†’ A1 β†’ A2 β†’ A3 β†’ A4 이런 μˆœμ„œλ‘œ 상속을 λ°›λŠ” κ²½μš°μ—”(A1 extends A) A4의 λΆ€λͺ¨ ν΄λž˜μŠ€λŠ” A, A1, A2, A3 클래슀 전뢀이닀.

// λΆˆκ°€λŠ₯!!!
public class A extends A1, A2 {}


상속 μ˜ˆμ‹œ

1. λΆ€λͺ¨ 클래슀

public class Parents {
    int a = 100;
    void methodP() {
        System.out.println("parent method");
    }
}


2. λΆ€λͺ¨ 클래슀λ₯Ό μƒμ†λ°›λŠ” μžμ‹ 클래슀

public class Child extends Parents {
    int a = 1;
    // μ–΄λ…Έν…Œμ΄μ…˜
    @Override
    void methodP() {
        System.out.println("child method");
    }
}
  • μžμ‹ ν΄λž˜μŠ€μ—μ„œλŠ” μžμ‹ λ§Œμ˜ λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•  수 있고 λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œ(Override)ν•  수 μžˆλ‹€.
  • μ˜€λ²„λΌμ΄λ”©ν•  경우 μ–΄λ…Έν…Œμ΄μ…˜μ„ λ‹¬μ•„μ£Όμž.(ex. @Override)
    • λΆ€λͺ¨/쑰상 ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ†Œλ“œμ˜ λ‚΄μš©μ„ μžμ‹ ν΄λž˜μŠ€μ— 맞게 μˆ˜μ •ν•˜λŠ” 것을 μ˜€λ²„λΌμ΄λ”©μ΄λΌκ³  ν•œλ‹€.
    • Annotation : JVMμ—κ²Œ μ•Œλ €μ£ΌλŠ” 주석 μ—­ν• . μ»΄νŒŒμΌν•  λ•Œ ν™•μΈν•˜λŠ” μš©λ„


3. μžμ‹ 클래슀 객체 생성 & μ‹€ν–‰

public static void main(String[] args) {
    Child ch = new Child();
    ch.methodP();
}

// μ‹€ν–‰ κ²°κ³Ό ===========
// child method




super와 super()

super

μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 멀버λ₯Ό μ°Έμ‘°ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ°Έμ‘° λ³€μˆ˜μ΄λ‹€.

λΆ€λͺ¨ 클래슀의 멀버λ₯Ό μ°Έμ‘°ν•  λ•ŒλŠ” superλ₯Ό μžμ‹ μ˜ 멀버λ₯Ό μ°Έμ‘°ν•  λ•ŒλŠ” thisλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬λΆ„ν•œλ‹€.

public class Child extends Parents {
    int a = 1;

    void methodC() {
        System.out.println(super.a);
        System.out.println(this.a);
    }
}

public static void main(String[] args) {
    Child ch = new Child();
    ch.methodC();
}

// μ‹€ν–‰ κ²°κ³Ό ===========
// 100
// 1


super()

λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ λ””ν΄νŠΈ μƒμ„±μžκ°€ 호좜되며 λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μ •ν•˜λ©΄ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό 인수둜 λ°›λŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€.

λ°˜λ“œμ‹œ 첫 번째 λ¬Έμž₯에 μ‚¬μš©λ˜μ–΄μ•Ό ν•œλ‹€.

class Parent {
    int p;

    Parent(int n) {
        p = n;
    }
    Parent() {
        p = 100;
    }
}

class Child extends Parent {
    Child() {
        super(9999);
    }
}

μžμ‹ 클래슀의 λ””ν΄νŠΈ μƒμ„±μžμ—λŠ” super()κ°€ λ””ν΄νŠΈλ‘œ μƒλž΅λ˜μ–΄ 있으며 λΆ€λͺ¨μ˜ λ””ν΄νŠΈ μƒμ„±μžκ°€ μ•„λ‹Œ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œλ§Œ μ‚¬μš©ν•˜λ©΄ λœλ‹€.




μƒμ†μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” ν‚€μ›Œλ“œ

instanceof μ—°μ‚°μž

객체 νƒ€μž…μ„ ν™•μΈν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.

주둜 상속 κ΄€κ³„μ—μ„œ λΆ€λͺ¨ 객체인지 μžμ‹ 객체인지 ν™•μΈν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

객체 instanceof 클래슀 ν˜•νƒœλ‘œ μ‚¬μš©λ˜λ©° ν˜•λ³€ν™˜ κ°€λŠ₯μ—¬λΆ€λ₯Ό ν™•μΈν•˜μ—¬ true / false 둜 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.

class Child extends Parent{}

Parent p = new Parent();
Child ch = new Child();

// instanceof λ©”μ„œλ“œ ν™œμš© =======

p instanceof Parent; // true
ch instanceof Parent; // true
p instanceof Child; // false
ch instanceof Child; // true